每次以陣列第乙個數為基數,從陣列兩端往中間找,小於基數的數放在陣列的左邊,大於它的數放在陣列的右邊,當i == j的時候,查詢結束,將基數賦值到這個位置,這個數在陣列中的位置就是這個,確定了。然後從這個數的左邊和右邊開始遞迴,直到所有的數都排完序。
時間複雜度:nlog2n(最好,平均)、n2(最壞)
#include#includeusing namespace std;
void sort(int ri,int l,int r)
if (i < j)//如果沒有這條語句直接賦值的話,倘若上面while結束迴圈的條件是i = j,那麼接下來的賦值就會出錯
while (i < j && ri[i] < x)
if (i < j)
}ri[i] = x; // 將基數賦值到這個位置
sort(ri,l,i-1); // 從i位置的左邊開始遞迴,由於i位置的數已經確定,所以本次遞迴右邊的數是從i-1開始的
sort(ri,i+1,r); // 同上
}return ;
}int main()
return 0;
}
ACM演算法 排序篇 預設快速排序
如圖 還是上題,除了用氣泡排序外,還可以用快速排序 當複雜度超過百萬數量級,我們就不能用氣泡排序了,應該使用諸如快速排序,歸併排序等排序演算法 他們的複雜度為 o nlogn 如下 includeusing namespace std int main int n int buf 10000 whi...
ACM 快速排序模板
快排基本思路應該就是二分 遞迴,從兩側同時 實則先從右往左 往中間找,同時和參變數對比,發現位置顛倒後交換位置,然後通過二分將其一塊一塊的分割開,直到分割到乙個元素位置,即完成了快排。includeusing namespace std int a 101 n void quicksort int ...
ACM道路之一 基礎演算法(快速排序)
快速排序 qsort 本質是分治思想 排序的一次劃分演算法從兩頭交替搜尋,直到low和high重合,因此其時間複雜度是o n 而整個快速排序演算法的時間複雜度與劃分的趟數有關。快速排序三個步驟 1 確定區域,左邊界 l 右邊界 r 基準值 x l r 2 2 保證區間內,x左側的任意值小於x,x右側...