js排序方法总结

余生长醉 提交于 2020-03-28 05:45:03

一、冒泡排序

  1.1 普通冒泡排序
  function maopaoSort(arr){
    for(var i=0,len=arr.length; i<len; i++){
      for(var j=0; j<len-1-i; j++){ // 每一次循环结束都会找到最大的数放到数组最后,第一次是把整个数组最大的数放到最后
        if(arr[j] > arr[j+1]){
          var temp = arr[j+1];
          arr[j+1]=arr[j];
          arr[j]=temp;
        }
      }
    }
    return arr;
  }
  var arr=[9,23,0,1,345,-3,2,56,79,34,11];
  console.log(maopaoSort(arr));
 
  1.2 改进普通版,减少不必要步骤
  function maopaoSort2(arr){
    var i= arr.length-1;   
    while(i>0){
      var pos = 0; // 每次循环记录最大数交换的位置
      for(var j=0;j<i;j++){
        if(arr[j] > arr[j+1]){
          pos = j;
          var temp = arr[j+1];
          arr[j+1]=arr[j];
          arr[j]=temp;
        }
      }
      i = pos;
    }
    return arr;
  }  
  var arr=[9,23,0,1,345,-3,2,56,79,34,11];
  console.log(maopaoSort2(arr));
 
    1.3 两头排序(左到右,找最大值,右到左,找最小值)
  function maopaoSort3(arr){
    var left = 0;
    var right = arr.length-1;
    var temp,j;
    while(left<right){
      for(j=left;j<right;j++){ // 左到右,找最大
        if(arr[j] > arr[j+1]){
          temp = arr[j+1];
          arr[j+1]=arr[j];
          arr[j]=temp;
        }
      }
      right--;
      for(j=right;j>left;j--){ // 右到左,找最小
        if(arr[j] < arr[j-1]){
          temp = arr[j-1];
          arr[j-1]=arr[j];
          arr[j]=temp;
        }
      }
      left++;
    }
    return arr;
  }
  var arr=[9,23,0,1,345,-3,2,56,79,34,11];
  console.log(maopaoSort3(arr));
 
二、选择排序(如排队一样,个子最矮的排最前面,然后从剩下找最矮的排第二位,以此往下)
  function selectSort(arr){
    var minIndex,temp;
    for(var i=0,len=arr.length;i<len;i++){
      minIndex = i;
      for(var j=i+1;j<len;j++){
        if(arr[minIndex]>arr[j]){
          minIndex=j;
        }
      }
      temp = arr[i];
      arr[i] = arr[minIndex];
      arr[minIndex]=temp;
    }
    return arr;
  }  
  var arr=[9,23,0,1,345,-3,2,56,79,34,11];
  console.log(selectSort(arr));
  
 
 
 
 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!