Java排序演算法之快速排序

2021-07-26 20:39:37 字數 1352 閱讀 1213

首先在陣列中選擇乙個基準點(該基準點的選取可能影響快速排序的效率,後面講解選取的方法),然後分別從陣列的兩端掃瞄陣列,設兩個指示標誌(lo指向起始位置,hi指向末尾),首先從後半部分開始,如果發現有元素比該基準點的值小,就交換lo和hi位置的值,然後從前半部分開始掃秒,發現有元素大於基準點的值,就交換lo和hi位置的值,如此往復迴圈,直到lo>=hi,然後把基準點的值放到hi這個位置。一次排序就完成了。以後採用遞迴的方式分別對前半部分和後半部分排序,當前半部分和後半部分均有序時該陣列就自然有序了。

排序過程:

排序演算法**實現:

public

class

quicksort ;

sort(testarray);

for(int i=0;i" ");}}

/*** 快速排序

*@param array

*/public

static

void

sort(int array)

}/**

* 遞迴排序當前陣列

*@param array

*@param low

*@param high

*/public

static

void

quicksort(int array,int low,int high)

}/**

* 查詢出中軸(預設是最低位low)的在numbers陣列排序後所在位置

*@param array

*@param low 開始位置

*@param high 結束位置

*@return 中軸所在位置

*/public

static

intgetmiddle(int array,int low,int high)

array[low]=array[high];//比中軸小的記錄移到低端

while (low//比中軸大的記錄移到高階

}array[low]=temp;//中軸記錄到尾

return low;// 返回中軸的位置}}

列印結果:

9 18 29 35 40 49

快速排序的優化

對於基準位置的選取一般有三種方法:固定切分,隨機切分和三取樣切分。固定切分的效率並不是太好,隨機切分是常用的一種切分,效率比較高,最壞情況下時間複雜度有可能為o(n2).對於三數取中選擇基準點是最理想的一種。

Java排序演算法之快速排序

基本思想 在資料序列中選擇乙個值作為比較的基準值,每趟從資料序列的兩端開始交替進行,將小於基準值的元素交換到序列前端,將大於基準值的元素交換到序列後端,介於兩者之間的位置則成為基準值的最終位置,直到子串行長度為1,完成排序 以序列,進行快速排序,以下是一趟快速排序過程示意圖 private stat...

Java排序演算法之快速排序

快速排序是將分治法運用到排序問題中的乙個典型例子,快速排序的基本思想是 通過 乙個樞軸 pivot 元素將 n 個元素的序列分為左 右兩個子串行 ll 和 lr,其中子串行 ll中的元素均比樞軸元素小,而子串行 lr 中的元素均比樞軸元素大,然後對左 右子串行分別進行快速排序,在將左 右子串行排好序...

Java排序演算法 快速排序

一.思想 對氣泡排序演算法的一種改進。通過一趟排序將排序的資料分割成兩個部分,其中一部分的所有資料都比另一部分的所有資料都要小,然後再按此方法對這兩部分分別再進行快速排序,依次類推。實現為 開始時先設兩個變數i start,j end 以第乙個元素作為中間點,pivot num i 以j 的形式從後...