美文网首页
使用栈进行快排序

使用栈进行快排序

作者: 围观工程师 | 来源:发表于2018-06-22 21:45 被阅读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])
    }
    

    相关文章

      网友评论

          本文标题:使用栈进行快排序

          本文链接:https://www.haomeiwen.com/subject/vhdlyftx.html