快速排序的原理很簡單,就是找一個分界點,把比它大的放到一邊,把比它小的放到另一邊。下面看一下圖和代碼
代碼實現
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);
}