• 入门之快速排序


     1 #include <iostream>
     2 /*
     3 入门之快速排序
     4 时间复杂度:O(nlogn)
     5 最坏情况时时间复杂度能达到O(n^2)
     6 借鉴自算法导论
     7 */
     8 #include <algorithm>
     9 using namespace std;
    10 int a[5] = {2,4,1,5,3};
    11 void quick_sort3(int *a,int l,int r)//枢轴可以是任意一个位置的数
    12 {
    13     if(l >= r) return;
    14     int k = a[r],i = l,j = r;
    15     while(i < j){
    16         while(i < j && a[i] <= k) ++i;
    17         while(i < j && a[j] >= k) --j;
    18         if(i != j) swap(a[i],a[j]);
    19     }
    20     swap(a[i],a[r]);
    21     quick_sort3(a,l,i-1);
    22     quick_sort3(a,i+1,j);
    23 }
    24 void quick_sort2(int *a,int l,int r)//枢轴只能是最后一个
    25 {
    26     if(l >= r) return;
    27     int t = a[r],j = l-1;
    28     for(int i = l; i <= r; ++i)
    29         if(a[i] < t)
    30         {
    31             ++j;
    32             if(i != j)
    33                 swap(a[i],a[j]);
    34         }
    35     swap(a[j+1],a[r]);
    36     quick_sort2(a,l,j);
    37     quick_sort2(a,j+2,r);
    38 }
    39 void quick_sort(int *a,int l,int r)//枢轴只能是第一个
    40 {
    41     if(l >= r) return;
    42     int m = a[l],i = l, j = r;
    43     while(i < j){
    44         while(i < j && a[j] >= m) --j; a[i] = a[j];
    45         while(i < j && a[i] <= m) ++i; a[j] = a[i];
    46     }
    47     a[i] = m;
    48     quick_sort(a,l,i-1);
    49     quick_sort(a,i+1,r);
    50 }
    51 int main()
    52 {
    53     quick_sort2(a,0,4);
    54     for(int i = 0; i < 5; ++i)
    55         cout << a[i] << " ";
    56     cout << endl;
    57     return 0;
    58 }
    Quick_sort.cpp
  • 相关阅读:
    关于jstl.jar引用问题及解决方法
    React 解析/ 第二节 使用 Reac
    NOde.js的安装和简介
    JACOB调用控件函数
    Linux 常用命令
    webService接口发布失败问题
    CommonsMultipartFile---用Spring实现文件上传
    验证签名(章)是否有效的方法
    新起点,新征程
    使用C#正则表达式获取必应每日图片地址
  • 原文地址:https://www.cnblogs.com/qq188380780/p/7223759.html
Copyright © 2020-2023  润新知