使用栈进行快排序

2018-06-22  本文已影响0人  围观工程师

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])
}
上一篇 下一篇

猜你喜欢

热点阅读