参考高一凡《数据结构算法与解析》
(小白一枚,本文帮助理解快速排序实现方法,不深入剖析)
void QSort(int low,int high){
int m;
if(low<high){
//attention:第一趟排序下来,序号m左边的数据都小于v[m],且未排序;右边的数据都大于v[m],且未排序
m=Partition(low,high);
//递归
QSort(low,m-1); //对序号m左边的数据进行排序
QSort(m-1,high);//对序号m右边的数据进行排序
}
}
int partition(int low,int high){
int axis;
/*int temp=rand()%(high-low)+low; //随机选择一个数作为轴
if(temp!=low) swap(temp,v[low]);
*/
axis=v[low]; //选择v[low]作为轴
//确保低端(左边)数据小于轴axis, 高端(右边)数据大于轴axis
while(low<high){
while(low<high && v[high]>=axis) high--; //从数组的最右边开始查找第一个小于axis的元素
v[low]=v[high]; //直至遇到第一个小于axis,将此值移至低端
while(low<high && v[low]<=axis) low++; //从数组的最左边开始查找第一个大于axis的元素
v[high]=v[low]; //直至遇到第一个大于axis,将此值移至高端
} //分别寻找两端下一个不满足要求的元素
v[low]=axis; //此时low=high;将轴axis放置此处,满足左边数据小于axis, 右边数据大于axis
return low;
}