排序问题

2018-02-26  本文已影响0人  我是走A牧

1、利用sort进行排序

var arr=[10,11,56,1,5,6,7,33,99,100,8];
 function sortNumber(a,b)
 {
   return a - b
 }

 console.log(arr.sort(sortNumber))

2、冒泡排序

 function sort(arr){
      for(var i=0;i<arr.length-1;i++){
        console.log(arr[i])
        for(var j=0;j<arr.length-i-1;j++){
          if(arr[j]>arr[j+1]){
            var d=arr[j];
            arr[j]=arr[j+1];`
            arr[j+1]=d;
          }
        }
      }
    }

3、选择排序

function sort1(arr){
   var minidnex,temp;
    for(var i=0;i<arr.length-1;i++){
          minidnex=i;
          for(var a=i+1;a<arr.length;a++){
             if(arr[a]<arr[minidnex]){//找到最小值的索引
               minidnex=a;
               console.log(minidnex)
             }
          }
      temp=arr[i]; //把最小值放在空位置
      arr[i]=arr[minidnex];//把最小值放在最前面
      arr[minidnex]=temp;//把大值放在相对应的位置
      console.log(arr)
    }
 }

4、插入排序

function insertionSort1(arr) {
    var temp, inner;
    for (var outer = 1; outer <= arr.length - 1; ++outer) {
      temp = arr[outer];
      inner = outer;
      while (inner > 0 && (arr[inner - 1] >= temp)) {
        arr[inner] = arr[inner - 1];
        --inner;
      }
     arr[inner] = temp;
      console.log(arr)
    }
  }

5 二元分算法(排序)

 var arr1=[44,1,22,55,4,6,88,77,999,888];
    function merge(left,right){
      var result=[];
      while(left.length&&right.length){
        if(left[0] < right[0]) {
          result.push(left.shift());
        }
        else {
          result.push(right.shift());
        }
      }
      console.log(left+"| "+right);
      return result.concat(left).concat(right);//总把最后最大的那个数进行合并
    }

   function crr(arr){
     if(arr.length==1){return arr}
     var mid=Math.floor(arr.length/2);
//     console.log(mid)
     var leftarr=arr.slice(0,mid);
     var rightarr=arr.slice(mid);
     return merge(crr(leftarr),crr(rightarr))
   }

   console.log(crr(arr1));
上一篇 下一篇

猜你喜欢

热点阅读