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

使用栈进行快排序

作者: 围观工程师 | 来源:发表于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])
}

相关文章

  • 使用栈进行快排序

    Think 快排的关键在于每次递归(下面代码中的出栈),都找到数组中的某个元素应该摆放的位置,以及将比它小的元素放...

  • 面试题 03.05. 栈排序

    面试题 03.05. 栈排序 栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放...

  • Swift-栈排序

    题目:编写程序,按升序对栈进行排序(即最大元素位于栈顶).最多只能使用一个额外的栈存放临时数据。 核心代码: `...

  • 算法分析[排序]

    1. 快速排序 快排最优复杂度是 O(n*log(n)),但是要使用辅助栈,总共要排序n次,每次查找中间值复杂度是...

  • 20. Valid Parentheses

    递归解法 栈解法 使用栈会快很多

  • 1.算法-栈和队列

    题目 解题思路 这题需要将原先无序的栈进行排序,变成从栈顶到栈底大到小排序,且只允许申请一个栈,即一个变量来实现,...

  • 4_6双栈排序

    请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复...

  • 双栈排序

    请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复...

  • 2020-05-14

    模拟栈 模拟队列 冒泡排序 选择排序 插入排序 快排 归并 堆排序 二分求数的三次方(牛顿迭代法)

  • iOS 时间、日期等字符串数组的排序

    使用NSSortDescriptor进行排序

网友评论

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

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