荷蘭國旗問題,快速排序,隨機快速排序

2021-09-26 10:09:09 字數 1879 閱讀 2436

/**

* 荷蘭國旗問題

* * 給定乙個陣列arr,和乙個數num,請把小於num的數放在陣列的 左邊,

* 等於num的數放在陣列的中間,

* 大於num的數放在陣列的 右邊。

* 要求額外空間複雜度o(1),時間複雜度o(n)

* */

public

static

int[

]partition

(int

arr,

int l,

int r,

int num)

else

if(arr[index]

>num)

else

}//返回交換後的邊界

return

newint

;}//交換函式

public

static

void

swap

(int

arr,

int l,

int r)

//快速排序

public

static

void

quicksort

(int

arr)

quicksort

(arr,

0, arr.length -1)

;}public

static

void

quicksort

(int

arr,

int l,

int r)

}public

static

int[

]partition

(int

arr,

int l,

int r)

else

if(arr[l]

> arr[r]

)else

}//將未交換的最後乙個元素交換

swap

(arr, more, r)

;//返回交換後陣列中間與最後乙個元素相同的那部分元素的區間下標

return

newint

;}//交換函式

public

static

void

swap

(int

arr,

int l,

int r)

public

static

void

quicksort

(int

arr)

quicksort

(arr,

0, arr.length -1)

;}public

static

void

quicksort

(int

arr,

int l,

int r)

}public

static

int[

]partition

(int

arr,

int l,

int r)

else

if(arr[l]

> arr[r]

)else

}swap

(arr, more, r)

;return

newint

;}//交換函式

public

static

void

swap

(int

arr,

int l,

int r)

荷蘭國旗問題 快速排序

目錄 一.荷蘭國旗 二.快速排序 亂序快排優化版 三.應用傳統快排求中位數 1.題目描述 給定乙個陣列arr和乙個數num,請把小於num的數放在陣列的左邊,等於num的數放在陣列的中間,大於num的數放在陣列的右邊。要求額外空間複雜度為o 1 時間複雜度為o n 2.分析思路 初始化less 1,...

快速排序的應用 荷蘭國旗問題

題目描述 荷蘭國旗有三橫條塊構成,自上到下的三條塊顏色依次為紅 白 藍。現有若干由紅 白 藍三種顏色的條塊序列,要將它們重新排列使所有相同顏色的條塊在一起。本問題要求將所有紅色的條塊放最左邊 所有白色的條塊放中間 所有藍色的條塊放最右邊。題目中可以使用數字和顏色進行對應 red 0 white 1 ...

荷蘭國旗問題(快速排序初步思想)

給定乙個整數陣列,給定乙個值k,這個值在原陣列中一定存在,要求把陣列中小於k的元素放到陣列的左邊,大於k的元素放到陣列的右邊,等於k的元素放到陣列的中間,最終返回乙個整數陣列。例如 給定陣列 2,3,1,4,7,6,5,10,9 給定乙個值9,那麼經過處理後結果陣列是 2,3,1 4,7,6,5,9...