mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-28 12:52:57 +08:00
build
This commit is contained in:
@ -1068,20 +1068,24 @@ comments: true
|
||||
return right
|
||||
}
|
||||
|
||||
/* 哨兵劃分 */
|
||||
fun partition(nums: IntArray, left: Int, right: Int): Int {
|
||||
/* 哨兵劃分(三數取中值) */
|
||||
fun partitionMedian(nums: IntArray, left: Int, right: Int): Int {
|
||||
// 選取三個候選元素的中位數
|
||||
val med = medianThree(nums, left, (left + right) / 2, right)
|
||||
// 將中位數交換至陣列最左端
|
||||
swap(nums, left, med)
|
||||
// 以 nums[left] 為基準數
|
||||
var i = left
|
||||
var j = right
|
||||
while (i < j) {
|
||||
while (i < j && nums[j] >= nums[left])
|
||||
j-- // 從右向左找首個小於基準數的元素
|
||||
j-- // 從右向左找首個小於基準數的元素
|
||||
while (i < j && nums[i] <= nums[left])
|
||||
i++ // 從左向右找首個大於基準數的元素
|
||||
swap(nums, i, j) // 交換這兩個元素
|
||||
i++ // 從左向右找首個大於基準數的元素
|
||||
swap(nums, i, j) // 交換這兩個元素
|
||||
}
|
||||
swap(nums, i, left) // 將基準數交換至兩子陣列的分界線
|
||||
return i // 返回基準數的索引
|
||||
swap(nums, i, left) // 將基準數交換至兩子陣列的分界線
|
||||
return i // 返回基準數的索引
|
||||
}
|
||||
```
|
||||
|
||||
|
Reference in New Issue
Block a user