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("
    ");
    }
  • 相关阅读:
    flink checkpoint机制的实现
    openjdk源码分析之AtomicLong
    cpp之宏和函数调用约定
    JNA 相关问题
    spark RDD
    最长连续序列
    买卖股票的最佳时机
    二叉树展开为链表
    不同的二叉搜索树
    柱状图中最大的矩形
  • 原文地址:https://www.cnblogs.com/acmtime/p/5703560.html
Copyright © 2011-2022 走看看