zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    15 反转链表
    八大排序算法总结(2)
    八大排序算法总结(1)
    22从上往下打印二叉树
    19顺时针打印矩阵
    20包含min函数的栈
    SpringMVC-Mybatis整合和注解开发
    优雅的代码之选择不同支付方式
    利用freemarker+SAX解析xml的方式对excel文件字段校验
    pl/sql编程语言
  • 原文地址:https://www.cnblogs.com/XXrll/p/11101470.html
Copyright © 2011-2022 走看看