利用Hoare划分重写快排
#include<iostream>
using namespace std;
void exchange(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int HOARE_PARTITION(int *arry,int p,int r){
int x=arry[p];
int i=p-1,j=r+1;
while(true){
do{
j=j-1;
}while(arry[j]>x);
do{
i=i+1;
}while(arry[i]<=x);
if(i<j){
exchange(arry[i],arry[j]);
}
else{
exchange(arry[p],arry[j]);
return j;
}
}
}
void QUICKSORT(int *arry,int p,int r){
if(p<r){
int q=HOARE_PARTITION(arry,p,r);
QUICKSORT(arry,p,q-1);
QUICKSORT(arry,q+1,r);
}
}
void show(int *arry,int i){
for(int j=0;j<=i;j++)
cout<<arry[j]<<" ";
cout<<endl;
}
int main(){
int arry[12]={-9,10,31,4,5,9,6,1,2,3,8,-9};
QUICKSORT(arry,0,11);
show(arry,11);
return 0;
}