#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int quicksort(int [] ,int ,int );
int partition(int [],int ,int );
#define SIZE 3000000
int main(void)
{ //分配内存、初始化数组
int *arr=(int *)malloc(SIZE*sizeof(int));
srand(time(0));
//打印排序前的数组
for(int i=0;i<SIZE;i++)
arr[i]=rand()%SIZE;
printf("Before Sorting\n");
for (int i=0;i<SIZE;i++)
{
printf("%5d",arr[i]);
if((i+1)%10==0)
putchar('\n');
}
putchar('\n');
//排序并计时
double time_start=clock();
quicksort(arr,0,SIZE-1);//快速排序
double time_end=clock();
//打印排序后的数组
printf("After Sorting\n");
for (int i=0;i<SIZE;i++)
{
printf("%5d",arr[i]);
if((i+1)%10==0)
putchar('\n');
}
putchar('\n');
printf("Consume:%.2f",(time_end-time_start)/CLOCKS_PER_SEC);
free(arr);
}
int quicksort(int *pt ,int p,int r)
{ if (p<r)
{ int q=partition(pt,p,r);
quicksort(pt,p,q-1);
quicksort(pt,q+1,r);
}
}
int partition(int * pt,int p,int r)
{ int x=pt[r];
int i =p-1;
for(int j=p;j<=r-1;j++)
{ if (pt[j]<=x)
{ i++;
int temp=pt[i];
pt[i]=pt[j];
pt[j]=temp;
}
}
int temp=pt[r];
pt[r]=pt[i+1];
pt[i+1]=temp;
return i+1;
}