取中间值为哨兵 但还是超时了
以下为代码
#include<stdio.h>
int a[100005]={0};
int Partition (int *a,int low,int high);
void swap (int *a,int *b);
void QSort(int *a,int low,int high);
int main()
{
int i;
int n;
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
QSort(a,0,n-1);
for (i=0;i<n;i++)
printf("%d",a[i]);
return 0;
}
int Partition (int *a,int low,int high)
{
int key;
int m=low+(high-low)/2;
key=a[m];
while (low<high)
{
while (low<high && a[high]>key)
high-=1;
swap(&key,&a[high]);
while (low<high && a[low]<key)
low+=1;
swap(&a[low],&key);
}
return low;
}
void swap (int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void QSort(int *a,int low,int high)
{
if (low<high)
{
int key;
key=Partition(a,low,high);
QSort(a,low,key-1);
QSort(a,key+1,high);
}
}