• Quicksort


    思路:找基准点,使得基准点左边都比它小或相等,右边比它大。

    挖坑法:若设基准点在最左边,则先从右边开始(左边开始的话,无法保证交换的数小于基数2 1 4 9),找到第一个小于基准数的数字,放入左边当前位置,放入时左++;再从左寻找第一个大于基准数的位置,放入右边当前位置,放入时右--;

    关键就是,把找到的数放入已经“冗余”的坑中。

    复杂度: O (nlogn) ~ O( n^2 )

    平均是每次二分logn,再乘上每次比较的n。

    最差是已经有序,n*(n-1)相当于冒泡排序。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 void quicksort(vector<int>&num,int l,int r){
     4     if(l>=r) return;
     5     int x=num[r],i=l,j=r;
     6     while(i<j){
     7         while(i<j&&num[i]<=x) i++;
     8         if(i<j) num[j--]=num[i];
     9         while(i<j&&num[j]>x) j--;
    10         if(i<j) num[i++]=num[j];
    11     }
    12     num[j]=x;
    13     quicksort(num,l,j-1);
    14     quicksort(num,j+1,r);
    15 }
    16 int main(){
    17    int b[]={1,66,99,1,2,3,3,3,4,4,5,6,6,99};
    18    int len=sizeof(b)/sizeof(b[0]);
    19    vector<int>num(b,b+len);
    20    quicksort(num,0,len-1);
    21    for(int i=0;i<num.size();i++)
    22     cout<<num[i]<<" ";  
    23    cout<<endl;
    24    return 0;
    25 }
    Quicksort
  • 相关阅读:
    连接数据库
    单行函数
    最小生成树
    hdu 1018
    组合 母函数 hdu 1171
    石子合并
    hdu 1047
    java 小综合
    java 声音处理
    并查集 1213
  • 原文地址:https://www.cnblogs.com/XXrll/p/11101470.html
Copyright © 2020-2023  润新知