JS实现快速排序

2018-08-14  本文已影响0人  天天要加油

快速排序用到以下方法

Math.floor->返回小于或等于一个给定数字的最大整数
    Math.floor(0.6); // output: 0
    Math.floor(0.2); //output: 0
    Math.floor(-0.2); // output: -1
    Math.floor(-0.6); // output: -1
splice->向/从数组中添加/删除项目,然后返回被删除的项目, splice会改变原数组的长度。

语法: arrayObject.splice(index,howmany,item1,.....,itemX)
参数:
index->必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany->必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX->可选。向数组添加的新项目。

    var arr = [1, 2, 3, 4, 5];
    var arrRemove = arr.splice(0, 2); // arr = [3, 4, 5]; arrRemove = [1, 2];
    arr.splice(1, 0, 8); // arr = [3, 8, 4, 5]
contact->用于连接两个或多个数组

语法: arrayObject.concat(arrayX,arrayX,......,arrayX)

    var arr1 = [1, 2];
    var arr2 = [3, 4];
    var arrConcat = arr1.concat(arr2);
    console.log(arrConcat) // arrConcat = [1, 2, 3, 4]
push->可向数组的末尾添加一个或多个元素,并返回新的长度

语法:arrayObject.push(newelement1,newelement2,....,newelementX)

    var arr = [1, 2, 3];
    console.log(arr.push(4)); // 4
    console.log(arr); // [1, 2, 3, 4]
快速排序:取中间位置值为基准,剩余数据与其相比较,比基准大放右边,比基准小放左边,递归不断重复这个过程,可得到排序后的数组。
function quickArray(arr) {
        var len = arr.length;
        var leftArr = [];
        var rightArr = [];
        if (len <= 1) {
            return arr;
        }
        var midIndex = Math.floor(len / 2);
        var midNumber = arr.splice(midIndex, 1)[0];
        for (var i = 0; i < len - 1; i++) {
            if (arr[i] < midNumber) {
                leftArr.push(arr[i]);
            } else {
                rightArr.push(arr[i]);
            }
        }
        return quickArray(leftArr).concat([midNumber], quickArray(rightArr));
    }

参考连接: http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html

上一篇 下一篇

猜你喜欢

热点阅读