1. 程式人生 > >高級排序算法之快速排序

高級排序算法之快速排序

tex 操作 spa typename for pla p s log ffffff

快速排序是一個高級排序算法,算法核心思想:確定每一個值的正確位置,即該值左邊為小,右邊為大即可

技術分享圖片

這個算法實現上面也是需要經過遞歸,一般取第一個值開始進行排序

當然也有特別需要註意的地方

設 需要找正確位置的值 定義為 arr[ l ] = v;

此時需要比較 值 e 與 v 的關系,無非兩種(三種即多一個等於)

技術分享圖片

若e > v ,則無話可說,無需移動,繼續移動遊標比較arr[ i + 1] 與 v 的大小

技術分享圖片

若 e < v,則需要交換 e 和 arr [ j + 1 ] 的值,並需要將 j ++ ,即自增操作。這樣使 arr[ l , j ]這段區間保持小於v的值。

繼續 arr[ i+1 ] 與 v 比較。

一直到最後將 v 與 arr [ j ] 兩個值互換即可,完成操作。

技術分享圖片

貼上代碼:

 1 template<typename T>
 2 int __Partition(T arr[], int l, int r)
 3 {
 4     T v = arr[l];
 5     int j = l;
 6     for (int i = j + 1; i <= r; i++)
 7     {
 8         if (arr[i] < v)
 9         {
10             _swap(arr[j + 1
], arr[i]); 11 j++; 12 } 13 } 14 _swap(arr[l], arr[j]); //給該值找到指定位置 15 return j; 16 } 17 18 template<typename T> 19 void __QuickSort(T arr[], int l, int r) 20 { 21 if (l > r) 22 return; 23 int p = __Partition(arr, l, r); 24 __QuickSort(arr, l, p - 1
); 25 __QuickSort(arr, p+1, l); 26 } 27 28 template<typename T> 29 void QuickSort(T arr[], int n) 30 { 31 __QuickSort(arr, 0, n - 1); 32 }

高級排序算法之快速排序