模板快速排序(luogu 1177)

Posted qseer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板快速排序(luogu 1177)相关的知识,希望对你有一定的参考价值。

测评传送门

真正意义上学会快排,以前一直调的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)的主要内容,如果未能解决你的问题,请参考以下文章

模板快速排序(luogu 1177)

P1177 模板快速排序

洛谷 P1177 模板快速排序

洛谷——P1177 模板快速排序

洛谷 1177 模板快速排序

P1177 模板快速排序