前端相关我爱编程

4.js三种数组排序方法

2018-04-16  本文已影响0人  星星的成长之路

快速排序

var arr=[18,62,7,9,94,5,4,54,23];
console.log(arr);
function quickSort(ary){
    if(ary.length<=1){      //如果数组只有一项,就不再进行比较,直接返回
        return ary;
    }

    var ind=Math.floor(ary.length/2); //取数组中间的某项当作基准点  9/2=4.5
    var midNum=ary.splice(ind,1)[0]; //把基准点从数组中删除,并得到它;原数组已经改变了
    var left=[];
    var right=[];

    for(var i=0;i<ary.length;i++){
        var cur=ary[i];
        if(cur<midNum){
            left.push(cur);   //比基准点小的放左边数组
        } else{
            right.push(cur);  //比基准点大的放右边数组
        }
    }
    //left和right也需要以上比较操作,直到左边和右边都排好序,在进行最后的拼接
    return quickSort(left).concat([midNum],quickSort(right));
}
console.log(quickSort(arr));

插入排序

var arr=[11,5,6,3,7,10,17,4,2,15];
function insertSort(ary){
var left=ary.splice(0,1);  //获取元素组的第一项,且是一个数组
 for(var i=0;i<ary.length;i++){
    var cur=ary[i];
    for(var j=left.length-1;j>=0;){
        if(cur<left[j]){   //当前抓的牌比左手边的牌要小的时候
            j--;           //继续和左手边的牌进行比较
            if(j===-1){       //如果左手边所有的牌都比它大,那么就放在最左边
                left.unshift(cur);
            }
        } else{   //如果当前的牌比左手边的某张牌大的时候,就将这张牌放在左手中比较的这张牌后
            left.splice(j+1,0,cur);
            break;
        }
    }
 }
    return left;
}
console.log(insertSort(arr));

冒泡排序

var arr=[11,1,12,34,6,5];
var temp;
for(var i=0;i<arr.length-1;i++){   //控制比较轮数
  for(var j=0;j<arr.length-1-i;j++){  //控制每轮比较次数
    if(arr[j]>arr[j+1]){     //交换数据
      temp=arr[j];
      arr[j]=arr[j+1];
      arr[j+1]=temp;
    }
  }
}
temp=null;
console.log(arr);   Array [ 1, 5, 6, 11, 12, 34 ]
上一篇 下一篇

猜你喜欢

热点阅读