它採用了一種分治的策略,通常稱為分治法。
分治法思想:將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。
對於陣列a, 隨機選擇乙個元素作為基準數pos,一般為第乙個元素或最後乙個元素。
將該陣列分為兩堆a[0,pos_index-1] 和 a[pos_index+1,n],一堆元素全都小於pos ,另一堆元素全都大於pos ,pos_index 為基準素的下標。
按照分治思想,左右兩堆分別進行快排遞迴操作,即quicksort(a, 0, pos_index -1) 和 quicksort(a, pos_index +1 , n) 。
1)一趟排序過程:
2)整個排序過程:
平均時間複雜度: o(nlog2n) 最壞(有序情況下):o(n^2)
空間複雜度: o(logn) 最壞 o(n)
穩定性: 不穩定
public static int partition(int array,int l, int r)
array[l] = pos;
return l;
}public static void quicksort(int array,int l, int r)
array[l] = pos; // 將基準數放入最後所求分割位置
return l;
}public static void quicksort(int array,int l, int r){
if(l
Java實現快速排序演算法
一 演算法描述 快速排序是對氣泡排序的一種改進。在氣泡排序中,記錄每次都是與相鄰位置上的資料作比較,因此每次只能移動乙個位置。而在快速排序中,記錄的比較和移動都是從兩端向中間進行的。其主要思想 首先在待排序陣列中選取乙個基準值 作為比較物件 然後利用基準值將待排陣列分成2個部分。基準值左邊的陣列的資...
java實現快速排序演算法
快速排序是應用很廣泛的排序演算法。主要原因是它實現簡單 適用於各種不同的輸入資料且在一般應用中比其他排序演算法都要快得多。快速排序主要思想就是當兩個子陣列都有序時整個陣列也就自然有序了。而這個過程就是先選出乙個基準數,一般都選第乙個,然後基準數的左邊都是小於基準數的,基準數的右邊都是大於基準數的。然...
JAVA實現快速排序演算法
排序快速演算法的英文 氣泡排序 的改進,比起氣泡排序,快速排序演算法的速度要快了很多 快速排序演算法的原理 若有乙個陣列為a,長度為n 獲取乙個key 一般是陣列的第乙個元素 設定兩個引數 i,j 中,i 0,j n 1 先從j開始往前搜尋 j 如果a j key,則將a j 的中的值賦給a i 即...