随机快速排序代码,在测试一百万随机生成数情况下,平均运行时间在0.3s,在测试十万随机生成数情况下,平均运行时间在0.055s。时间复杂度O(nlgn)。
#include <stdio.h>
#define LEN 1000000
int arr[LEN];
void quickSort(int arr[],int p,int q);
int main()
{
int i;
for(i=0; i<LEN; i++)
{
arr[i]=rand();
}
quickSort(arr,0,LEN-1);
}
/*快速排序算法*/
void quickSort(int arr[],int p,int q)
{
int i,j,r;
int ranVal;
int temp;
if(p>=q) return;
/*生成随机数,介于p,q之间,并与待排序数组最后一项交换*/
ranVal=p+rand()%(q-p);
{
temp=arr[ranVal];
arr[ranVal]=arr[q];
arr[q]=temp;
}
r=arr[q]; //选最后一项作为pivot
i=p-1;
j=p;
while(j<=q-1)
{
if(arr[j]<=r)
{
i++;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
j++;
}
i++;
arr[q]=arr[i];
arr[i]=r;
quickSort(arr,p,i-1); //recursion the left of pilot
quickSort(arr,i+1,q); //recursion the right of pilot
}