標籤:複製 bsp targe 通過 data- 高效 hive 過程 qup
這個排序方法的時間複雜度為O(nlogn),最壞時間複雜度為O(n^2),所以說是屬於所有排序方法中比較高效率的一種了。
這種排序方法的基本思想是:
先找到一個區間中的一個基準點,然後找到這個區間右邊所有小於這個基準點的元素都放到基準點左邊,還有這個區間左邊所有左邊大於這個基準點的元素都放到基準點右邊。用遞迴思想,將區間化小,一直小到只有一個元素即排序完成。
百度百科這麼說的:快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列
該思想的實現代碼寫出來可能不一樣,但是思想大概就是這個思想。
下面是我搜集到的一個人寫的快速排序的代碼:
1 void partition(int a[], int start,int end) 2 { 3 if(start>=end) 4 return; 5 6 int low = start; 7 int heigh = end; 8 int index = a[low]; // 基準點選在區間開頭的元素 9 10 while(low<heigh)11 {12 while(a[heigh]>index&&low<heigh) // 從區間右側開始,找到比基準點index小的元素就放到區間左邊13 {14 heigh--;15 }16 if(low<heigh)17 {18 a[low++] = a[heigh];19 }20 while(a[low]<index&&low<heigh) // 從區間左邊開始,找到比基準點index大的元素就放到區間右邊21 {22 low++;23 }24 if(low<heigh)25 {26 a[heigh--] = a[low];27 }28 }29 30 a[low] = index; // 把基準點放到區間中間31 partition(a,start,low-1); // 把基準點左側的區間進行整理----遞迴32 partition(a,low+1,end); // 把基準點右側的區間進行整理----遞迴33 }
下面是調用樣本:
int a[] = {1,3,5,4,3,0,8,6}; partition(a,0,7);
運行結果:
參考文章:
- http://www.cnblogs.com/surgewong/p/3381438.html
- http://baike.baidu.com/link?url=GDBGdDYxqZmDS.....
- http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html
快速排序法