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

这是个历史更早的版本,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;
} 


你可能感兴趣的:(null,System,buffer)