快速排序是一个高级排序算法,算法核心思想:确定每一个值的正确位置,即该值左边为小,右边为大即可
这个算法实现上面也是需要经过递归,一般取第一个值开始进行排序
当然也有特别需要注意的地方
设 需要找正确位置的值 定义为 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 }
原文地址:https://www.cnblogs.com/cyhezt/p/9762175.html
时间: 2024-10-28 22:56:26