快速排序

  1. 第一种方式:

    function qSort(arr) {
      //声明并初始化左边的数组和右边的数组
    var left = [], right = []
    //使用数组最后一个元素作为基准值
    var base = arr[arr.length - 1]
    //当数组长度只有1或者为空时,直接返回数组,不需要排序
    if(arr.length <= 1) return arr
    //进行遍历
    for(var i = 0, len = arr.length; i < len - 1; i++) {
    if(arr[i] <= base) {
    //如果小于基准值,push到左边的数组
    left.push(arr[i])
    } else {
    //如果大于基准值,push到右边的数组
    right.push(arr[i])
    }
    }
    //递归并且合并数组元素
    return [...qSort(left), ...[base], ...qSort(right)]
    }
    const arr = [2, 4, 1, 5, 3, 1]
    const s = qSort(arr)
    console.log(s) // [1, 1, 2, 3, 4, 5]
  2. 第二种方式

    ar quickSort = function(arr) { 
    if (arr.length <= 1) { return arr; } 
    var pivotIndex = Math.floor(arr.length / 2); //基准位置(理论上可任意选取)
    var pivot = arr.splice(pivotIndex, 1)[0];//基准数
    var left = [];
    var right = [];
    for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
    left.push(arr[i]);
    } else {
    right.push(arr[i]);
    }
    }
    return quickSort(left).concat([pivot], quickSort(right));//链接左数组、基准数构成的数组、右数组

    归并排序

    
    
posted @ 2018-08-20 14:46  dfgfgf  阅读(141)  评论(0编辑  收藏  举报