【口试篇】JS的经常使用排序算法

冒泡排序:
每次对照相邻两个数据的大小,升序小的拍前面,若前一个数比后一个数大,则交流两数位置。须要两次for轮回遍历.

  • 长处:简朴

  • 瑕玷:时候复杂度高,运转效力低下

function sortArr(arr){
  var temp;
  for(var i=0;i<arr.length-1;i++){
    for(var j=i+1;j<arr.length;j++){
            if(arr[i] >    arr[j]){
               times++;
               temp = arr[i];
               arr[i] = arr[j];
               arr[j] = temp;    
            }
            console.log("第"+(++times)+"次排序后:"+arr);  
        }
    }
    return arr;
}
var times = 0;
sortArr([2,5,4,1,7,3,8,6,9,0]);

out :[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

疾速排序:
先找到一个基准点(平常数组中部),数组即被分为两部分,顺次与基准点数据比较,比它小的,放左侧,比它大的放右侧,摆布分别用一个空数组去存储比较后的数据,末了实行上述操纵,晓得数组长度<=1;

  • 长处:疾速经常使用

  • 瑕玷:须要分外说明两个数组,浪费了内存空间资本

var times = 0;
var quickSort = function(arr){
    if(arr.length<=1){//递归完毕前提
        return arr;
    }
    var midIndex = Math.floor(arr.length/2);//找基准点
    var midIndexVal = arr.splice(midIndex,1);//取基准点的值
    var left = [];
    var right = [];
    for(var i=0;i<arr.length;i++){
        if(arr[i]<midIndexVal){
            left.push(arr[i]);
        }
        else{
            right.push(arr[i]);
        }
        console.log("第"+(++times)+"次排序后:"+arr);
    }
    return quickSort(left).concat(midIndexVal,quickSort(right));//递归实行
}
quickSort([2,5,4,1,7,3,8,6,9,0]);

out:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    原文作者:张爱玲
    原文地址: https://segmentfault.com/a/1190000008668105
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞