zoukankan      html  css  js  c++  java
  • 高级排序算法之快速排序

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

    快速排序

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

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

    设 需要找正确位置的值 定义为 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, r);
    26 }
    27 
    28 template<typename T>
    29 void QuickSort(T arr[], int n)
    30 {
    31     __QuickSort(arr, 0, n - 1);
    32 }
  • 相关阅读:
    数据后台查询分页条件查询数据
    避免js缓存
    jquery点击按钮
    网页内容打印
    数据表的导出
    C#实现字符串按多个字符采用Split方法分割
    JQuery
    AJAX
    JSON
    BOM
  • 原文地址:https://www.cnblogs.com/cyhezt/p/9762175.html
Copyright © 2011-2022 走看看