Think
快排的关键在于每次递归(下面代码中的出栈),都找到数组中的某个元素应该摆放的位置,以及将比它小的元素放在它的左边,比它大的元素放在右边。
Code
let stack = [[0, arr.length]]
while(stack.length > 0) {
let el = stack.shift()
if (el[0] >= el[1]) continue
let i = el[0], j = el[1], key = arr[i]
while (i !== j) {
while (i !== j) {
if (arr[j] < key) {
arr[j] = arr[j] ^ arr[i]
arr[i] = arr[i] ^ arr[j]
arr[j] = arr[j] ^ arr[i]
i++
break
} else {
j--
}
}
if (i === j) break
while (i !== j) {
if (arr[i] > key) {
arr[j] = arr[j] ^ arr[i]
arr[i] = arr[i] ^ arr[j]
arr[j] = arr[j] ^ arr[i]
j--
break
} else {
i++
}
}
}
stack.unshift([i + 1, el[1]])
stack.unshift([el[0], i - 1])
}
网友评论