首先在陣列中選擇乙個基準點(該基準點的選取可能影響快速排序的效率,後面講解選取的方法),然後分別從陣列的兩端掃瞄陣列,設兩個指示標誌(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 的形式從後...