zoukankan      html  css  js  c++  java
  • 坐在马桶上看算法:快速排序

    初始状态:6  1  2 7  9  3  4  5 10  8

    排序的过程图

    首先哨兵j开始出动。因为此处设置的基准数是最左边的数,所以需要让哨兵j先出动,这一点非常重要(请自己想一想为什么)  ::最后和基准数交换的一定是小于基准数的数、

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int s[100],n;
    void quick_sort(int left,int right){//left--right的区间排序
        if(left>=right) return;
        int tm=s[left];  //基准数
        int i=left,j=right;
        while(i!=j){
            while(s[j]>=tm&&i<j)    j--;  //从右边往左边找
            while(s[i]<=tm&&i<j) i++;  //从左往右找
            if(i<j)swap(s[i],s[j]);
        }
        swap(s[left],s[i]);
        quick_sort(left,i-1);quick_sort(i+1,right);
    }
    
    int main(){
        //freopen("data.in","r",stdin);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",s+i);
        quick_sort(1,n);
    //    for(int i=1;i<=n;i++)   printf("%d ",s[i]);
    //    printf("
    ");
    }
  • 相关阅读:
    csp-s测试41 T2 影子
    模拟测试15 T3:rps (概率期望, 神*DP)
    考试沙币错误
    测试40
    水管局长 Lct
    测试32:chemistry
    测试35:抽卡
    模拟30,树
    考试策略&&模拟30经验总结:
    模拟测试28
  • 原文地址:https://www.cnblogs.com/acmtime/p/5703560.html
Copyright © 2011-2022 走看看