基本思想:在資料序列中選擇乙個值作為比較的基準值,每趟從資料序列的兩端開始交替進行,將小於基準值的元素交換到序列前端,將大於基準值的元素交換到序列後端,介於兩者之間的位置則成為基準值的最終位置,直到子串行長度為1,完成排序以序列,進行快速排序,以下是一趟快速排序過程示意圖
private
static
void
quicksort(int array,int start,int end)
if (i < j)
while (i = array[i])
if (i < j)
}array[i] = base;
quicksort(array,start,j-1);
quicksort(array,i+1,end);}}
快速排序的時間複雜度與序列初始排列和基準值的選取有關。每趟排序將序列分成長度相近的兩個子串行,時間複雜為o(
nlog2n
) 。最差情況是每趟分成的子串行差異很大,時間複雜度為o(
n2) 。
快速排序在遞迴呼叫過程中,需要使用棧儲存引數,棧所占用的空間與遞迴呼叫的次數有關,最好情況情況下的空間複雜度為o(
log2n)
;最壞情況下空間複雜度為o(
n); 平均空間複雜度為o(
log2n)
。快速排序演算法是不穩定的。
Java排序演算法之快速排序
首先在陣列中選擇乙個基準點 該基準點的選取可能影響快速排序的效率,後面講解選取的方法 然後分別從陣列的兩端掃瞄陣列,設兩個指示標誌 lo指向起始位置,hi指向末尾 首先從後半部分開始,如果發現有元素比該基準點的值小,就交換lo和hi位置的值,然後從前半部分開始掃秒,發現有元素大於基準點的值,就交換l...
Java排序演算法之快速排序
快速排序是將分治法運用到排序問題中的乙個典型例子,快速排序的基本思想是 通過 乙個樞軸 pivot 元素將 n 個元素的序列分為左 右兩個子串行 ll 和 lr,其中子串行 ll中的元素均比樞軸元素小,而子串行 lr 中的元素均比樞軸元素大,然後對左 右子串行分別進行快速排序,在將左 右子串行排好序...
Java排序演算法 快速排序
一.思想 對氣泡排序演算法的一種改進。通過一趟排序將排序的資料分割成兩個部分,其中一部分的所有資料都比另一部分的所有資料都要小,然後再按此方法對這兩部分分別再進行快速排序,依次類推。實現為 開始時先設兩個變數i start,j end 以第乙個元素作為中間點,pivot num i 以j 的形式從後...