效率最高的快排:
#include<iostream>
using namespace std;
void swap(int &a,int &b){
int temp = a;
a = b;
b = temp;
}
int partition(int a[],const int low,const int high){
int key = a[low];//基准元素
int positon = low;//记录大于基准元素的数字的位置
for(int j = low+1;j<=high;j++){
if(a[j]<key){
positon++;
if(positon!=j)//说明是一大一小,相等就说明有可能是一直是比它小的数字两个一直跟着
//一旦有一个大的,j就会增大,i自然就比它小了,就被扔在原地(大数字那里)啦
swap(a[j],a[positon]);
}
}
a[low] = a[positon];//这里一直存着那个key
a[positon] = key;
return positon;
}
void quick(int a[],int left,int right){
if(left < right){
int r = partition(a,left,right);
quick(a,left,r-1);
quick(a,r+1,right);
}
}
int main()
{
int A[20] = {8,13,41,9,0,3,5,2,7,26,77,33,22,55,4,99,1,6,100,23};
cout<<"before : ";
for( int k = 0; k < 20; k++ )
cout << A[k] << " ";
cout << endl;
quick(A,0,19);
cout<<"after : ";
for( int k = 0; k < 20; k++ )
cout << A[k] << " ";
cout << endl;
}