高級排序算法之快速排序
阿新 • • 發佈:2018-10-09
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 }
高級排序算法之快速排序