码迷,mamicode.com
首页 > 编程语言 > 详细

坐在马桶上看算法:快速排序

时间:2016-07-25 16:04:18      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

初始状态: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("\n");
}

坐在马桶上看算法:快速排序

标签:

原文地址:http://www.cnblogs.com/acmtime/p/5703560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!