首页 > 编程语言 > 详细

【模板】快速排序(luogu 1177)

时间:2018-08-04 20:55:53      阅读:131      评论:0      收藏:0      [点我收藏+]

测评传送门

真正意义上学会快排,以前一直调的sort…… 但毕竟能手写就手写,对自己也是一种锻炼

解析:

快排说白了就是把要排的一行数切成一半,记录下中间值,在左半部分找到比中间值大的(记d1),再在右半部分找到比中间值小的(记d2)

如果d1在d2的左边,就交换他们,d1后推一格,d2前推一格,继续快排

 

#include<stdio.h>
using namespace std;
int a[100001];

void fast(int l,int r)
{
    int i,j,mid,p;
    i=l,j=r;    
    mid=a[(l+r)>>1];
    do
    {
        while(a[i]<mid) i++;
        while(a[j]>mid) j--;
        if(i<=j)
        {
            p=a[i];
            a[i]=a[j];
            a[j]=p;
            i++,j--;
        }
    }while(i<=j);
    if(l<j) fast(l,j);
    if(i<r) fast(i,r);
}

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i]);
    }
    fast(1,n);
    for(int i=1;i<=n;++i){
        printf("%d ",a[i]);
    }
    return 0;
}

 

【模板】快速排序(luogu 1177)

原文:https://www.cnblogs.com/qseer/p/9419862.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!