你需要掌握的快速排序算法:
思路:
QuickSort(A,p,r)
if p<r
q=Partition(A,p,r)
QuickSort(A,p,q-1)
QuickSort(A,q+1,r)
快排的划分算法:
思路:
两个指针:scanner 、bigger。
scanner: <=sp 右移;
>sp 交换,bigger左移。
边界:如果最后一个扫描元素大于主元,bigger左移之后小于了scanner;
如果最后一个扫描元素小于主元,scanner的右移,导致scanner大于bigger。
末了状态一定是: bigger<scanner,且二者临近。
#include<iostream>
using namespace std;
int partition(int A[],int p,int r){
int pivot=A[p];
int sp=p+1; //扫描指针
int bigger=r; //右侧指针
while(sp<=bigger){
if(A[sp]<=pivot){ //扫描元素小于主元,左侧指针向左移
sp++;
}
else{
swap(A[sp],A[bigger]);
bigger--;
}
}
swap(A[p],A[bigger]);
return bigger; //返回主元在交换完成后的下标
}
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);
}
}
int main(){
int arr[]={1,6,2,3,4,8,11,3,9,4,2,5,3};
quickSort(arr,0,12);
for(int i=0;i<13;i++){
cout<<arr[i]<<" ";
}
return 0;
}