1. 程式人生 > >快速排序法

快速排序法

ron 它的 jet amp uek cnblogs 方法 ++ 部分

這個排序方法的時間復雜度為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);

運行結果

技術分享

參考文章:

  1. http://www.cnblogs.com/surgewong/p/3381438.html
  2. http://baike.baidu.com/link?url=GDBGdDYxqZmDS.....
  3. http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html

快速排序法