快速排序是氣泡排序的改進版,也是最好的一種內排序,在很多面試題中都會出現,也是作為程式設計師必須掌握的一種排序方法。
思想:1.在待排序的元素任取乙個元素作為基準(通常選第乙個元素,但最的選擇方法是從待排序元素中隨機選取乙個作為基準),稱為基準元素;
2.將待排序的元素進行分割槽,比基準元素大的元素放在它的右邊,比其小的放在它的左邊;
3.對左右兩個分割槽重複以上步驟直到所有元素都是有序的。
所以我是把快速排序聯想成東拆西補或西拆東補,一邊拆一邊補,直到所有元素達到有序狀態。
下面再看看示圖理解下吧:
6.對元素5兩邊的元素也重複以上操作,直到元素達到有序狀態。
演算法實現:
public排序結果:class
quicksort
arr[right] =temp; //基準元素歸位
quicksort(arr,_left,left-1); //對基準元素左邊的元素進行遞迴排序
quicksort(arr, right+1,_right); //對基準元素右邊的進行遞迴排序
}
}public
static
void
main(string args) ;
system.out.println("排序之前:");
for(int
element : array)
quicksort(array,0,array.length-1);
system.out.println("\n排序之後:");
for(int
element : array)}}
排序之前:演算法分析:1.當分割槽選取的基準元素為待排序元素中的最大或最小值時,為最壞的情況,時間複雜度和直接插入排序的一樣,移動次數達到最大值10 5 3 1 7 2 8排序之後:
1 2 3 5 7 8 10
cmax = 1+2+...+(n-1) = n*(n-1)/2 = o(n2) 此時最好時間複雜為o(n2)
2.當分割槽選取的基準元素為待排序元素中的"中值",為最好的情況,時間複雜度為o(nlog2n)。
3.快速排序的空間複雜度為o(log2n).
4.當待排序元素類似[6,1,3,7,3]且基準元素為6時,經過分割槽,形成[1,3,3,6,7],兩個3的相對位置發生了改變,所是快速排序是一種不穩定排序。
快速排序原理
高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它...
快速排序原理
速排基礎 在要排的數 比如陣列a 中選擇乙個中心值key,通過一次排序將陣列a分成兩部分,其中以key值為中心,key值右邊都比key值大,key值左邊的都key值小,然後對這兩部分分別重複這個過程,直到整個有序,然後使用遞迴呼叫即可。排序過程如下 我們以陣列,選擇第乙個元素30為基準值。初始排序為...
快速排序原理解剖
高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它...