JS实现快速排序

快速排序用到以下方法

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 快速排序的算法已经忘得干干净净,这次拿出来重温下,并用JS实现一次。 原理 先介绍下大致的排序步骤:比如有这么一个...
    闪闪发光的狼阅读 4,533评论 0 3
  • 快速排序 快速排序 由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割...
    前端C罗阅读 3,919评论 0 6
  • 快速排序的思想 (1)在数据集之中,找一个基准点 (2)建立两个数组,分别存储左边和右边的数组 (3)利用递归进行...
    WPeach阅读 3,064评论 0 0
  • 大致分三步: 1、找基准(一般是以中间项为基准) 2、遍历数组,小于基准的放在left,大于基准的放在right ...
    LJQ21阅读 3,843评论 0 1
  • 颓吧,颓吧,就让我颓吧,颓到5号出分。
    HuMingZhe阅读 702评论 0 0