十大经典排序算法系列(五) 快速排序 js 版

递归版

递归点      如果数组的元素个数大于1,就再进行分解,递归点就是 数组元素个数大于1
递归出口  当数组元素个数 <= 1

'use strict'

var arr = [0, 1000, 999, 666, 500, 300, 123, 100, 91, 50, 22, 12, 10, 5, 2, 1, 0, 1100];
var count = 1;

function quickSort(arr) {
    let arrLength = arr.length;

    //递归出口点
    if (arrLength <= 1) return arr;
    let n = Math.floor(arrLength / 2);

    // 每次递归都从数组中删除一个对比值元素, 完成长度递减到递归出口点.
    let pivot = arr.splice(n, 1)[0];
    let left = [], right = [];

    // 比较大小分别放在不同数组中
    for (let i = 0; i < arrLength-1; i++) {
        if (pivot > arr[i]) {
            left.push(arr[i]);
        } else {
            right.push(arr[i]);
        }
    }

    // console.log(count++, left, right);
    // 递归点, 数组长度大于 1
    // return quickSort(left).concat([pivot], quickSort(right));
    left = quickSort(left), right = quickSort(right);
    return left.concat([pivot], right);
}

console.log(quickSort(arr));

 

你可能感兴趣的:(数据结构与算法)