快速排序的簡單實現

2021-07-29 12:13:15 字數 925 閱讀 8617

快速排序是一種比較高階的排序方法。擁有o(nlogn)的平均複雜度。快速排序的基本思路是交換。

具體做法如下,首先選定序列中的乙個元素作為樞軸量(通常選擇第乙個元素)。然後讓序列中的各元素依次和樞軸量進行比較,通過交換使得:比它小的排在它左邊,比它大的排在它右邊。通過這一趟排序,我們將序列分成了兩部分,其中一部分全部比另一部分小(當然樞軸量放在哪一部分無所謂)。之後的想法就比較自然了,我們可以對分成的兩部分序列重複上面的過程(遞迴),直到整個序列有序。

//快速排序

//lovesunmoonlight

#include#include#include#define max 10

using namespace std;

typedef structnode;

typedef structlist;

//一趟排序過程,返回值是樞軸量的新位置

int onestepswap(list& s,int low,int high)

{ s.r[0]=s.r[low]; //將樞軸記錄到r[0]

int pivot=s.r[low].key; //樞軸的鍵值

while(low=pivot) //將比樞軸小的移動到低端

high--;

s.r[low]=s.r[high];

while(low

經過測試,在我的i5台式電腦排序10萬個數所需要的時間大約為450ms,用stl的qsort排了一下大概是300ms左右,應該算是比較高效的排序演算法了。

快速排序的簡單實現(Quick Sort)

快速排序由c.a.r.hoare在1962年提出。它的基本思想是 速排序和歸併排序類似,也是運用了遞迴的思想,通過一趟排序將要排序的資料分割成獨立的兩部分,每次選取乙個主元 pivot 使得主元左邊的的元素都比主元小,主元右邊的元素都大於主元,然後分別對主元兩邊再遞迴的呼叫quicksort。步驟s...

快速排序java簡單實現

快速排序簡單實現 將陣列的某一段元素進行劃分,小的在左邊,大的在右邊 param a 陣列 param start 開始的位置 param end 結束的位置 return 基準值的位置 public static intdivide int a,int start,int end 上面的while...

2015 6 9 快速排序的java簡單實現

快速排序的思想不知道怎麼描述,那麼就直接貼 吧。做個筆記。public class quicksort sort a,0,a.length 1 for int i 0 i right return if left 0 right a.length 1 return int i left int j ...