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

第七章快速排序之“快速排序Hoare版本HOARE-QUICKSORT”(思考题7-1)

2012-01-05 22:05 447 查看
这是个历史更早的版本,Hoare是人名,这个版本的Partition()函数跟现在的不一样。我觉得这个老版本不如现在的版本好理解,大面上看起来可能好理解,但是具体写代码时考虑指针移动,很麻烦。

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

#define BUFFER_SIZE 10

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

i=p;
j=r;
x=a[p];

while(1)
{
while(a[j]>x)
{
j--;
}
while(a[i]<x)
{
i++;
}
if(i<j)
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
else
{
return i;
}
}
}

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

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

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