int Partition(ElemType A[],int low ,int high)
{
ElemType pivot=A[low];//每次总以当前表的第一个元素作为基准进行划分
while(low<high){
while(low<high&&A[high]>=pivot) --high;
A[low]=A[high];//将比基准小的元素移动到左端
while(low<high&&A[low]<=pivot) ++low;
A[high]=A[low];//将比基准大的元素移动到右端
}
A[low]=pivot;//基准元素放到最终位置
return low;//返回存放基准值的最终位置
}
void QuickSort(ElemType A[],int low ,int high){
if(low<high){
int pivotpos=Partition(A,low,high);
//Partition()划分操作,将表A[low...high]被枢轴划分为两个子表
QuickSort(A,low,pivotpos-1);
QuickSort(A,pivotpos+1,high);
}
}
注意!
- 快排不稳定
- 快排是所有内部排序算法中平均性能最优的排序算法
- 当每次的基准都把表分为长度相近的两个子表时,速度是最快的;
- 当表本身已经有序或者逆序时,速度最慢