您的位置:首页 > 产品设计 > UI/UE

第七章快速排序之“快速排序的随机化版本RANDOM-QUICKSORT”

2012-01-05 17:13 567 查看
因为快速排序的最坏情况是O(n^2),最佳情况是O(nlgn),采用随机化版本时间复杂度可以达到平均情况O(nlgn)。

书上的证明过程让人心静、让人谦卑,its amazing!比起那些让人拍案叫绝的证明过程,用代码实现反而不是最重要的了。

#include <string.h>
#include <time.h>

#define BUFFER_SIZE 10

int Partition(int *a,int p,int r)
{
int i=0;
int j=0;
int tmp=0;
int x=0;

x=a[r];
i=p-1;
for(j=p;j<r;j++)
{
if(a[j]<=x)
{
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 i=0;
int tmp=0;

srand((unsigned)time(NULL));
i=rand()%(r-p+1)+p;

tmp=a[i];
a[i]=a[r];
a[r]=tmp;

return Partition(a,p,r);
}

void RandomQuickSort(int *a,int p,int r)
{
int q=0;
if(p<r)
{
q=RandomPartition(a,p,r);
RandomQuickSort(a,p,q-1);
RandomQuickSort(a,q+1,r);
}
}
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");

RandomQuickSort(a,0,BUFFER_SIZE-1);
printf("对数组进行随机化快速排序:\n");
for(i=0;i<BUFFER_SIZE;i++)
{
printf("%d ",a[i]);
}

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: