用左端点作为基准的快速排序
#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\n",a[n/2]); else printf("%d\n",a[n/2+1]); } return 0; }
手打快排……让我意识到一点,C的memset比C++的memset慢多了……