快速排序具體可以分為兩塊部分:踢與分。
踢:將線性佇列中的某個元素a(一般是開頭的元素),由兩端往中間比較,為它選擇合適的位置,達成佇列中a元素的左側的元素的值小於a元素值,右側的元的素值大於a元素值。由此,確定了a元素在公升序線性表中的位置就確定了下來。
分:線性表中a元素的位置確定,接下來對a元素左側和右側的子線性表進行排序,用上述的方法對子線性表排序。
時間複雜度:o(nlogn)
分析:以樹的概念,樹的深度為logn,同深度的線性表處理時n,logn*n=o(nlogn)
**:
#ifndef quicksort_h_included
#define quicksort_h_included
/* 公升序:為長度為n的陣列s快排,0起始 */
void
quicksort
(int s,
int n)
s[i]
= s[j]
;while
(i<=key)
s[j]
= s[i];}
return;}
#endif
// quicksort_h_included
**檢測路徑:
測試**:
#include
void
quicksort
(int dt,
int s,
int n)
dt[i]
= dt[j]
;while
(i<=key)
dt[j]
= dt[i];}
dt[i]
= key;
quicksort
(dt, s, i)
;quicksort
(dt, i+
1, n)
;return;}
intmain
(void
)quicksort
(num,
0, n)
;for
(int i=
0; i)else
}return0;
}
快速排序思想
本文通俗易懂,但有的描述有問題,轉至 高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了...
快速排序演算法思想
一 快速排序遞迴演算法 1 對下列採用快速排序 2 可以把最左邊 4 作為基數 然後分別從兩邊出發進行檢索 一定要從右邊開始 如果從左邊開始的話等下結果為 53241 因為我們要使左邊的數小於基數 從左邊開始 我們檢索是在大於基數那個位置停止 這時和基數交換 使左邊的數大於基數 導致結果出錯 首先要...
分治思想 快速排序
快速排序思想 設k a 0 取基準元素 將k挪到適當位置,使得比k小的元素都在k左邊,比k大的元素都在k的右邊,和k相等的,在k的左右均可。然後再把k的左邊的元素和右邊的元素按照同樣的方式進行排序。時間複雜度 n logn 空間複雜度 1 和歸併排序比較,快速排序比歸併排序更加節省空間,但是快速排序...