快速排序原理

2021-08-20 07:18:05 字數 1663 閱讀 3054

速排基礎

在要排的數(比如陣列a)中選擇乙個中心值key,通過一次排序將陣列a分成兩部分,其中以key值為中心,key值右邊都比key值大,key值左邊的都key值小,然後對這兩部分分別重複這個過程,直到整個有序,然後使用遞迴呼叫即可。

排序過程如下:

我們以陣列,選擇第乙個元素30為基準值。

初始排序為[30,60,40,67,45,76,49,77]。

第一趟排序過程如下:[70

,60,40,67,45,76,49,77]

[70,60,40,67,45,76,

49,77]

[49,

60,40,67,45,76,

70,77]

[49,60,

40,67,45,76,

70,77]

[49,60,40,

67,45,76,

70,77]

[49,60,40,67,45,76,

70,77]

[49,60,40,67,45,70,

76,77]

第一趟排序後:

[49,60,40,67,45]

70[76,77]

第二趟排序過程:[49

,60,40,67,45]

70[76,77]

[45,

60,40,67,49]

70[76,77]

[45,

49,40,

67,60]

70[76,77]

[45,49,

40,67,60]

70[76,77]

[45,40,

49,67,60]

70[76,77]

第二趟排序後:

[45,40]

49[67,60]

70[76,77]

第三趟排序過程:

[45,40]49[

67,60]

70[76,77]

[40,45]

49[60,67]

70[76,77]

第三趟排序後:

[40,45,49,60,67,70,76,77]

最後結果為:

40,45,49,60,67,70,76,77

**表示如下:

public class z 

i=z;

j=x;

index=a[i];// 用子表的第乙個記錄做基準值

while(i=index)

j--;

if(ia[i++]=a[j];// 用比基準小的記錄替換低位記錄

while(ii++;

if(ia[j--]=a[i];// 用比基準大的記錄替換高位記錄

} a[i]=index;// 將基準數值替換回 a[i]

sort(a, z, i-1);// 對低子表進行遞迴排序

sort(a, i+1, x);// 對高子表進行遞迴排序

}public static void zsort(int a)

public static void main(string args) ;

zsort(a);

system.out.println(arrays.tostring(a));

}}

快速排序原理

高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它...

快速排序原理

快速排序是氣泡排序的改進版,也是最好的一種內排序,在很多面試題中都會出現,也是作為程式設計師必須掌握的一種排序方法。思想 1.在待排序的元素任取乙個元素作為基準 通常選第乙個元素,但最的選擇方法是從待排序元素中隨機選取乙個作為基準 稱為基準元素 2.將待排序的元素進行分割槽,比基準元素大的元素放在它...

快速排序原理解剖

高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它...