#include <string.h>
#include <time.h>
#define BUFFER_SIZE 10
int Partition(int *a,int p,int r)
{
int tmp=0;
int i=0;
int j=0;
i=p-1;
for(j=p;j<r;j++)
{
if(a[j]<=a[r])
{
i++;
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
tmp=a[i+1];
a[i+1]=a[r];
a[r]=tmp;
return i+1;
}
int RandomPartition(int *a,int p,int r)
{
int min=0;
int mid=0;
int max=0;
int i=0;
int j=0;
int k=0;
int tmp=0;
srand((unsigned)time(NULL));
i=rand()%(r-p+1)+p;
j=rand()%(r-p+1)+p;
k=rand()%(r-p+1)+p;
min=a[i];
mid=a[j];
max=a[k];
min=(min<mid)?min:mid;
mid=(mid<max)?mid:max;
mid=(mid>min)?mid:min;
if(a[i]==mid)
{
tmp=a[i];
a[i]=a[r];
a[r]=tmp;
}
else if(a[j]==mid)
{
tmp=a[j];
a[j]=a[r];
a[r]=tmp;
}
else if(a[k]==mid)
{
tmp=a[k];
a[k]=a[r];
a[r]=tmp;
}
return Partition(a,p,r);
}
void QuickSort(int *a,int p,int r)
{
int q=0;
while(p<r)//直到把右半边数组划分成最多只有一个元素为止,就排完了!不能用if哦,用if的话,右半边数组就只被划分一次。
{
q=RandomPartition(a,p,r);
QuickSort(a,p,q-1);
p=q+1;
}
}
int main()
{
int i=0;
int j=0;
int a[BUFFER_SIZE];
//随机生成数组
srand((unsigned)time(NULL));
for(j=0;j<BUFFER_SIZE;j++)
{
a[j]=rand()%100;
}
printf("随机生成的数组:\n");
for(i=0;i<BUFFER_SIZE;i++)
{
printf("%d ",a[i]);
}
printf("\n");
QuickSort(a,0,BUFFER_SIZE-1);
printf("对数组进行快速排序:\n");
for(i=0;i<BUFFER_SIZE;i++)
{
printf("%d ",a[i]);
}
system("pause");
return 0;
}