数组排序

  1.冒泡排序

  var ary=[0,1000,800,12,23,22,24,45,5,78,15,12,12,23,1245,56];
  function bubbleSort(ary){
    var temp=null;
//    做一个标记
    var flag=false;
//1.循环ary.length-1次,在循环中每次拿第一项与后一项比较,大于后一项与其交换位置,(每轮可以循环出一个最大值放在最后);
//    2.做一个标记flag,标记是否循环过;
    for(var i=0;i<ary.length-1;i++){
      for(var j=0;j<ary.length-i-1;j++){
        if (ary[j]>ary[j+1]){
          temp=ary[j];
          ary[j]=ary[j+1];
          ary[j+1]=temp;
          flag=true;
        }
      }
//      判断上一轮是否修改了,如果修改了,那把标记改为false,没有修改直接跳出大循环
      if (flag){
        flag=false;
      }else{
        break
      }
    }
    return ary
  }
 var result=bubbleSort(ary);
  console.log(result);

2.快速排序

  var ary=[0,1000,800,12,23,22,24,45,33,78,15,12,12,23,1245,56];
  function quickSort(ary){
//    1.判断需要排序的数组个数必须大于1个
    if (ary.length<=1){
      return ary
    }
//    2.寻找中心的index,及对应的value,把中间值截取出来,注意返回的是数组
    var pointIndex=Math.floor(ary.length/2);
    var pointValue=ary.splice(pointIndex,1)[0];
    var left=[];
    var right=[];
//    3.循环剩下的值,与中间值做对比,分类
    for(var i=0;i<ary.length;i++){
      if (ary[i]>pointValue){
        right.push(ary[i])
      }else{
        left.push(ary[i])
      }
    }
//    4.递归,对左边,右边数组重复操作,别忘了加中间截掉的值
    return quickSort(left).concat([pointValue],quickSort(right))
  }
  var result=quickSort(ary)
  console.log(result)

3.插入排序

  var ary=[12,23,12,23,45,48,165,48,465,4,89,165];
  function insetSort(ary){
//    1.创建新数组
    var newAry=[];
//    2.去一个值放在新数组中
    newAry.push(ary[0]);
    for(var i=1;i<ary.length;i++){
      var cur=ary[i];
//      3.新数组从后向前循环
      for(var j=newAry.length-1;j>=0;){
//        4.新数组中的值大于比较值时
        if (newAry[j]>cur){
//          j--;当j==-1时,证明是最小的了,直接添加到开始
          j--
          if (j==-1){
            newAry.unshift(cur)
          }
        }else{
//          5.否则就是很大喽,那就直接添加到J项后面,J+1项前面
          newAry.splice(j+1,0,cur);
          j=-1
        }
      }
    }
    return newAry
  }
  console.log(insetSort(ary))

 

posted @ 2018-04-03 10:52  追忆枉然  阅读(116)  评论(0编辑  收藏  举报