1.基準元素pivot/mark 指標
mark指標代表的是小於基準元素的區域邊界
2.遍歷到的元素大於基準元素,繼續遍歷;
3.遍歷到的元素小於基準元素,mark指標向右移動一位(意味著多了一位比基準元素小的元素,所以pivot的區域邊界增大了),最新遍歷到的元素和mark位置的元素交換位置,因為該元素屬於小於pivot的區域。
4.這一輪宣告結束時,mark 左側都是比它小的,右側都是比它大的。再分成兩部分進行遞迴,就完成了單邊迴圈的快速排序。
public
static
void
quicksort
(int
arr,
int startindex,
int endindex)
//得到基準元素的位置
int pivorindex=
partition
(arr,startindex,endindex)
;//根據基準元素,分為兩部分進行遞迴
quicksort
(arr,startindex,pivorindex-1)
;quicksort
(arr,pivorindex+
1,endindex);}
private
static
intpartition
(int
arr,
int startindex,
int endindex)
} arr[startindex]
=arr[mark]
; arr[mark]
=pivot;
return mark;
}
遞迴 快速排序 快速排序
問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...
快速排序 雙邊掃瞄與單邊掃瞄的實現
快速排序 時間複雜讀o n logn 最差o n 2 平均o n logn 主要思想是選取乙個標誌位,大於標誌位的放到右邊,小於標誌位的放到左邊,在以標誌位為分割,分而制之,左遞迴,右遞迴,直到完成。快速排序的思想 雙邊掃瞄 快速排序就像乙個資料快,前後各有乙個下標 指標 i j,隨機選取 此處取下...
快速冪 迴圈 遞迴
目錄其實原理很簡單,有初一的學歷就好,你只需要知道 k為正整數 x2k xk xk x2k 1 xk xk x 任何數的0次方都為1 除0外 任何數的1次方都為它本身 至於為什麼,問數學老師去 然後一直遞迴下去即可 計算xk int poww int x int k 這個稍微有億一點點複雜 你需要知...