快速排序

看来好几个版本关于快速排序的描述,最终选择了《算法导论》里给出的一个算法,感觉这个特别容易理解和记忆。

原算法如下:

QUICKSORT(A,p,r)
1 if p<r
2  then q ←PARTITION(A,p,r)
3 QUICKSORT(A,p,q-1)
4 QUICKSORT(A,q+1,r) 

PARTITION(A,p,r)
1 x ←A[r]
2 i ←p-1
3 for j←p to r-1
4 do if A[i]<=x
5 then i←i+1
6 exchange A[i]←→A[j];
7 exchange A[i+1]←→A[r]
8 return i+1


使用C++实现的代码实现如下所示:


#include <iostream>
using namespace std;
int partion(int a[],int p,int r)
{	int i = p-1;
	int tem = a[r];
	int j = p;
	for(j;j<=r-1;j++)
	{
		if(a[j]<=tem)
		{
			i = i+1;
			int temp = a[i];
			a[i]=a[j];
			a[j]=temp;
		}
	}
	a[r]=a[i+1];
	a[i+1]= tem;
	return i+1;
}

void QuickSort(int a[],int p,int r)
{
	if (p<r){
		int q=partion(a,p,r);
		QuickSort(a,p,q-1);
		QuickSort(a,q+1,r);
	}
}


int main()
{
	int array[]={4,5,7,2,1,9,3,6};
	QuickSort(array,0,7);
	cout<<"start"<<endl;
	for(int i=0;i<=7;i++)
		cout<<array[i]<<" ";
	cout<<endl;
	return 0;
} 


你可能感兴趣的:(算法)