用左端点作为基准的快速排序

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

int a[100005];

void quicksort(int x,int y)
{
    int i=x,j=y;
    int now=a[i];
    if (x>=y) return;
    while (i<j)
    {
        while (i<j && a[j]>=now) j--;
        if (i<j) a[i]=a[j];
        while (i<j && a[i]<=now) i++;
        if (i<j) a[j]=a[i];
    }
    a[i]=now;
    quicksort(x,i-1);
    quicksort(i+1,y);
}

int main()
{
    int n,i;
    while (scanf("%d",&n)!=EOF)
    {
        for (i=0; i<=n; i++) a[0]=0;
        for (i=1; i<=n; i++) scanf("%d",&a[i]);
        quicksort(1,n);
        if (n%2==0) printf("%d
",a[n/2]);
        else printf("%d
",a[n/2+1]);
    }
    return 0;
}

手打快排……让我意识到一点,C的memset比C++的memset慢多了……

原文地址:https://www.cnblogs.com/Shymuel/p/9085060.html