• C++快速排序


     1 // 快速排序:begin
    2 // 快速排序在平均情况下的时间复杂性是O(nlogn),快速排序时不稳定的排序
    3
    4 // 方法1:
    5 template<class T>
    6 void quick_sort1(T *a, int left, int right)
    7 {
    8 if (left < right) // 数组元素至少有2个才进行排序
    9 {
    10 int p = partition(a, left, right);
    11 quick_sort1(a, left, p - 1);
    12 quick_sort1(a, p + 1, right);
    13 }
    14 }
    15
    16 template<class T>
    17 int partition(T *a, int left, int right)
    18 {
    19 int l = left, r = right;
    20 T pivot = a[left];
    21 while (l < r)
    22 {
    23 while (a[l] < pivot) ++l;
    24 while (a[r] > pivot) --r;
    25 swap(a[l], a[r]);
    26 }
    27 swap(a[l], a[r]); // 当i>=j时,上面while循环会多swap操作一次,所以必须撤销最后一次操作
    28 swap(a[r], pivot);
    29
    30 return r;
    31 }
    32
    33 //==================================
    34 // 方法2:
    35 template<class T>
    36 void quick_sort2(T *a, int left, int right)
    37 {
    38 if(left >= right)
    39 return;
    40
    41 int l = left, r = right;
    42 T pivot = a[left];
    43 while(l != r)
    44 {
    45 while(l < r && a[r] >= pivot) r--;
    46 a[l] = a[r];
    47 while(l < r && a[l] <= pivot) l++;
    48 a[r] = a[l];
    49 }
    50 a[l] = pivot;
    51
    52 quick_sort2(a, left, l - 1);
    53 quick_sort2(a, l + 1, right);
    54 }
    55 // 快速排序:end

    测试代码如下:

     1 int main()
    2 {
    3 // 测试快速排序
    4 int test1[7] = {7, 6, 5, 4, 3, 2 ,1};
    5 // char test1[7] = {'e', 'x', 'a', 'm', 'p', 'l', 'e'};
    6 //quick_sort1(test1, 0, 6);
    7 quick_sort2(test1, 0, 6);
    8 cout << "After QuickSort:"<<endl;
    9 for(int i = 0; i < 7; ++i)
    10 cout << test1[i] << "";
    11 cout << endl;
    12
    13 return 0;
    14 }



     

  • 相关阅读:
    linux 防火墙管理
    自动化运维监控工具有哪些?常用的开源运维监控工具大全
    编程必备github代码仓库使用
    安全加密算法
    浅笑若风之高效工作流程
    jmeter压力测试工具使用
    ES扩容实战记录
    在5G+AI+CLCP下拉动互联网走向物联网
    设计模式之简单工厂模式
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/lingshaohu/p/2234249.html
Copyright © 2020-2023  润新知