快速排序的原理很简单,就是找一个分界点,把比它大的放到一边,把比它小的放到另一边。下面看一下图和代码
代码实现
void Qsort(int a[],int low,int high)
{
if(low>=high)
return;
int first=low;//副本做游标
int last=high;
int key=a[first];//确定第一个为分界点
while(first<last)//游标相碰,退出循环
{
while(first<last&&a[last]>=key)//从后向前扫到第一个比分界点小的值
last--;
a[first]=a[last];//用找到的Last直接覆盖First,之前的值已有保存
while(first<last&&a[first]<=key)//从前向后找到第一个比分界点大的值
first++;
a[last]=a[first];//Frist直接覆盖Last,之前的值已有保存
}
a[first]=key;//界点位置已经确定
Qsort(a,low,first-1);//递归两边排序
Qsort(a,last+1,high);
}