void quickSort(int arr[],int left,int right)
{
if(left < right)
{
int i = left,j = right , x = arr[left];//保存第一值arr[l]進x中,相當於把arr[l]這個數從所在位置挖出,留下一個坑,等別人用。
while(i < j)
{
while(i < j && arr[j] >= x)//從右向左找第一個小於x的數arr[j]
j--;
if(i < j)
{
arr[i] = arr[j];
i++;
}
while(i < j && arr[i] < x) //從左向右找第一個大於等於x的數arr[i]
i++;
if(i < j)
{
arr[j] = arr[i];
j--;
}
}
arr[i] = x; //把x放進最後挖出來的數所在的洞裏
quickSort(arr , left , i-1);
quickSort(arr , i+1 , right);
}
}
快速排序算法
快速排序算法的思想就是從數字序列中隨便挑一個數,然後比跟剩餘元素逐個比較,比它小的放在它的左邊,比它大的放在它右邊,然後這個數的位置就坐定了,然後分別取這個數左邊的所有元素組成的新序列,還有右邊的新序列,也就是左序列和右序列。用以上方法來遞歸實現。但是爲了不浪費空間,總不能真的每個左序列和右序列都重新創建一個新的數組,可以通過記錄原序列中的左序列右序列起始位置與結尾位置來實現,至於2個位置元素的交換,就用中間變量來記錄了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.