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

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

时间:2018-08-04 21:04:58      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:ref   --   org   strong   一半   class   锻炼   交换   ret   

测评传送门

真正意义上学会快排,以前一直调的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)

标签:ref   --   org   strong   一半   class   锻炼   交换   ret   

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

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