3

冒泡排序:
每次对比相邻两个数据的大小,升序小的拍前面,若前一个数比后一个数大,则交换两数位置。需要两次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]

静书
603 声望55 粉丝

简书