#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;
}