排序算法之快速排序(QuickSort)

快排的重点是对切分函数(Partion)的编写:
#include<stdio.h>

void swapint(int &a,int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

int Partion(int a[],int start,int end)
{
	int i = start,j = end +1;
	int v = a[start];
	while(true)
	{
		while(a[++i]<v) 
			if(i==end) break;
		while(a[--j]>v)
			if(j==start) break;
		if(i>=j) break;
		swapint(a[i],a[j]);
	}
	swapint(a[start],a[j]);
	return j;
}

void QuickSort(int a[],int length)
{
	QuickSort(a,0,length-1);
}

void QuickSort(int a[],int start,int end)
{
	if(end <= start) return;
	int vv = Partion(a,start,end);
	QuickSort(a,start,vv-1);
	QuickSort(a,vv+1,end);
}

int main()
{
	int aa[] = {15,18,1,6,2,9,3,4,10,12,5,7};
	int len=sizeof(aa)/sizeof(aa[0]);
	printf("数组aa的排序之前的次序:\n");
	for(int i=0;i<len;++i)
	{
		printf("%d  ",aa[i]);
	}
	printf("\n");
	QuickSort(aa,len);
	printf("数组aa的排序之后的次序:\n");
	for(int i=0;i<len;++i)
	{
		printf("%d  ",aa[i]);
	} 
	getchar();
}

参考:《算法(第四版)》 《剑指offer》

猜你喜欢

转载自blog.csdn.net/akenseren/article/details/79349476