高级排序算法之快速排序

快速排序是一个高级排序算法,算法核心思想:确定每一个值的正确位置,即该值左边为小,右边为大即可

快速排序

这个算法实现上面也是需要经过递归,一般取第一个值开始进行排序

当然也有特别需要注意的地方

设 需要找正确位置的值 定义为 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 }

猜你喜欢

转载自www.cnblogs.com/cyhezt/p/9762175.html