快排

#include<iostream>
using namespace std;
void exchange(int &a,int &b)
{
	int temp = a;
	 a = b;
	 b = temp;
}
void display(int A[],int count);


void display(int A[],int count)
{
   for(int i=0;i<count;i++)
   {
	   cout<<A[i]<<endl;
   }
   
}



int Partition(int A[],int p,int r)
{
int x = A[r];
int i = p-1;
for(int j =p;j<r;j++)//从左开始分为两部分,比选择元素小就放在前面。i用来表示比选择元素小的部分的区间最大值,j用来迭代每一个元素。
{
	if(A[j]<=x){
		i+=1;
	exchange(A[i],A[j]);
	}
}
exchange(A[i+1],A[r]);
return i+1;
}
void quickSort(int A[],int p,int r)
{
if(p<r)
{
	int q = Partition(A,p,r);
	quickSort(A,p,q-1);
	quickSort(A,q+1,r);

}
}


//快排算法速率分析,如果每次划分的区域为n-1和1个自身,那就是最坏的情况,要排n-1(划n-1次区域)*n即O(n的平方)
//如果每次划分的区域为各一半,选择的比较元素为中间值,就是最好的情况。划logn次区域就能划完,所以时间复杂度为O(n*logn)
int main()
{
	int A[]={3,4,5,1,2,5,3,6,7,1};
	int B[]={9,8,7,6,5,4,3,2,1,0};
	//quickSort2(A,0,9);
	//display(A,10);
	//quickSort(A,0,9);
	cout<<endl;
    
	display(A,10);
	return 0;

}

  

posted @ 2015-11-27 14:19  D*D*D  阅读(387)  评论(0)    收藏  举报