应付面试足以的简版快排

69 阅读1分钟

leetcode.cn/problems/so…

  1. 快速排序通过选择一个主元素即 selected 把数组分成了比这个选择值大的和比这个选择值小的部分
  2. 通过传递这两部分数据下去,当小于两个元素即排好了 (结束条件),需要将数据 传递归上去
  3. 这样从最底层一层层递归上去后那么数据就排好了
function quickSort(arr) {
    if(arr.length < 2) return arr
    const selected = arr[0]
    const eq = []
    const bigger = []
    const smaller = []
    for(let i = 0; i < arr.length; i++) {
       if(arr[i] > selected) {
           bigger.push(arr[i])
       } else if(arr[i] < selected) {
           smaller.push(arr[i])
       } else {
         eq.push(arr[i])
       }
    }
    const biggerSorted = quickSort(bigger)
    const smallerSorted = quickSort(smaller)
    return [...smallerSorted, ...eq, ...biggerSorted]
}

这种写法应付大部分面试时足够了的,但是通不过leetcode的检测,主要是数量级一大起来这种写法就会有溢出栈的bug