快速排序
问:
- 快速排序
解:
- 随机target+双指针
const sortArray = function(arr) {
const partition = (left, right, target) => {
let smaller = left - 1
let bigger = right + 1
while (left < bigger) {
if (arr[left] < target) {
smaller++
[arr[left], arr[smaller]] = [arr[smaller], arr[left]]
left++
} else if (arr[left] > target) {
bigger--
[arr[bigger], arr[left]] = [arr[left], arr[bigger]]
} else {
left++
}
}
// 返回左右区域坐标
return {
smaller,
bigger
}
}
const getRes = (left, right) => {
if (left >= right) return
const target = arr[~~(Math.random() * (right - left + 1)) + left]
const { smaller, bigger } = partition(left, right, target)
getRes(left, smaller)
getRes(bigger, right)
}
getRes(0, arr.length - 1)
return arr
};