#include <iostream>
using namespace std;
void P(int a[],int n){
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
int Quicksortp(int* h,int l, int r){
int i=l, j=r, x=h[l]
while(i<j){
while(h[j]>=x && i<j) --j;
if(i<j) h[i++]=h[j];
while(h[i]<=x && i<j) ++i;
if(i<j) h[j--]=h[i];
}
h[i]=x;
return i;
}
void Quicksort(int*h, int l, int r){
if(l>=r){
return;
}
int i=Quicksortp(h, l, r);
Quicksort(h, l, i-1);
Quicksort(h, i+1, h);
}
int main()
{
int a[]= {72,6,57,88,60,42,83,73,48,85};
//int a[]= {10,9,8,7,6,5,4,3,2,1};
P(a,10);
QuickSort(a,0,9);//注意最后一个参数是n-1
P(a,10);
return 0;
}
最好:划分后,左侧右侧子序列的长度相同,
最坏:从小至大,递归树变成一棵树。每个分区只能得到一个对象的子序列小于前一个。它必须通过n-1次来定位所有对象,第二次需要通过n-i键代码比较来找到第二个对象的位置。
方法:取数组第一个值与数组做比较,大的放右边,小的放左边,分治法,一直分治到全部排完。