面试常考算法之 快速排序

210 阅读1分钟

快速排序的实现思路

  1. 算出数组的长度的一半,取出这个中间值,和这个中间值所对的索引值
  2. 遍历整个数组,把大于中间值的这一项放在一个数组,小于中间值的放在另外一个数组
  3. 把大于中间值的数组和小于中间值的数组分别再次做递归

具体代码实现

    function quickSort(arr) {
        if (arr.length <= 1) { return arr } // 每次递归进来先看判断
        var index = Math.floor(arr.length / 2) // 找到中间索引值,并向下取整
        var midValue = arr.splice(index, 1)[0] // 用改变原数组的方法取到 这个中间值
        let left = [], right = []
        
        arr.forEach(item => { // 遍历数组,小于中间值的放在left数组,反之放在right数组
            if (item < midValue) {
                left.push(item)  
            } else {
                right.push(item)
            }
        })
        return quickSort(left).concat([midValue], quickSort(right))
        // 用递归,再次循环left和 right,直到arr.length条件 <= 1,跳出,计算结果
    }