快排的思想:如果要排序陣列中下標從 p 到 r 之間的一組資料,我們選擇 p 到 r 之間的任意乙個資料作為 pivot(分割槽點)。
我們遍歷 p 到 r 之間的資料,將小於 pivot 的放到左邊,將大於 pivot 的放到右邊,將 pivot放到中間。經過這一步驟之後,陣列 p 到 r 之間的資料就被分成了三個部分,前面 p 到 q-1之間都是小於 pivot 的,中間是 pivot,後面的 q+1 到 r 之間是大於 pivot 的。
根據分治、遞迴的處理思想,我們可以用遞迴排序下標從 p 到 q-1 之間的資料和下標從 q+1 到r 之間的資料,直到區間縮小為 1,就說明所有的資料都有序了。
如果我們用遞推公式來將上面的過程寫出來的話,就是這樣:
遞推公式:quick_sort(p…r) = quick_sort(p…q-1) + quick_sort(q+1, r)
終止條件:
p >= r
public
class
sortquick
;new
sortquick()
.quicksort
(a,0
, a.length -1)
;for
(int i =
0; i < a.length; i++
) system.out.
println()
;new
sortquick()
.selecttopk
(a,3);
for(
int i =
0; i <
3; i++)}
public
void
selecttopk
(int
nums,
int k)
else}}
/** * 這裡是遞迴,遞迴都要使用遞迴公式來思考**的編寫
** @param nums
* @param start
* @param end
*/public
void
quicksort
(int
nums,
int start,
int end)
int partition =
partition
(nums, start, end)
;quicksort
(nums, start, partition -1)
;quicksort
(nums, partition +
1, end);}
public
intpartition
(int
nums,
int start,
int end)
}//把基準數挪到角標這裡
遞迴 快速排序 快速排序
問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...
第16周 專案1(2) 快速排序
問題描述 2.以中間位置的元素為基準 實現 cpp view plain copy include define maxsize 20 typedef intkeytype 定義關鍵字型別 typedef char infotype 10 typedef struct 記錄型別 rectype 排序...
資料結構和演算法 12 之快速排序
學習資料結構和演算法的日常demo 快速排序基本介紹 實現 public class 快速排序 quick a system.out.println arrays.tostring a private static void quick int a 左下標,右下標 private static vo...