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

2021-10-23 07:16:41 字數 1453 閱讀 2655

給定乙個整數陣列,給定乙個值k,這個值在原陣列中一定存在,要求把陣列中小於k的元素放到陣列的左邊,大於k的元素放到陣列的右邊,等於k的元素放到陣列的中間,最終返回乙個整數陣列。

例如:

給定陣列

[2, 3, 1, 4, 7, 6, 5, 10, 9],給定乙個值9,

那麼經過處理後結果陣列是:

[2, 3, 1 ,4, 7, 6, 5, 9, 10 ]

/**

* @description:荷蘭國旗問題 以陣列最後乙個元素為基準,小於它的放在他的前面,等於它的放在中間,大於他的放在他的後面。 分成三部分

* @author mryan

* @date 2020/5/12 9:31

* asi

*/public

class

dutchflag

;int target =9;

int[

] solve =

solve

(nums,

0, nums.length -

1, target)

;for

(int i : solve)

system.out.

println()

;for

(int i : nums)

}/**

* @param nums

* @param l

* @param r

* @param target

* @return 大於區小於區左右邊界的位置

*/public

static

int[

]solve

(int

nums,

int l,

int r,

int target)

//當前值nums[l] 小於 劃分值

else

if(nums[l]

< target)

//當前值nums[l] 大於 劃分值

else

if(nums[l]

> target)

}//返回兩個數, 第乙個是返回小於區的右邊界 閉區間

// 第二個是大於區的左邊界 閉區間

//例如此例子

// 返回6 9

荷蘭國旗問題 快速排序

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

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

荷蘭國旗問題 給定乙個陣列arr,和乙個數num,請把小於num的數放在陣列的 左邊,等於num的數放在陣列的中間,大於num的數放在陣列的 右邊。要求額外空間複雜度o 1 時間複雜度o n public static int partition int arr,int l,int r,int nu...

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

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