js排序算法

一 插入排序

直接插入排序

根据顺序将未排序数组中的元素一一插入已排序好的数组中

function insert(arr){
  var source = arr;
  var result = [];
  for(var i=0; i<source.length; i++){ //时间频度 n
    if(i==0){ //n
      result[0]=source[0] //1
    } else{
      for(var j=0; j<result.length; j++){ //n^2-1
        if(source[i]<result[j]){ //n^2
          result.splice(j, 0, source[i]); n^2
          break;
        } else {
          if(j==result.length-1) { n^2
            result[j+1]=source[i]; n^2
            break;
          }
        }
      }
    }
  }
  return result; }
时间复杂度: O(n^2)

二 选择排序

二元选择排序

将代排序数组中的最大和最小值选出来分别移到数组的两端


function minMax(arr){
  if(arr.length<=1){
    return arr[0];
  }
  var minIndex, maxIndex;
  for(var k=0; k<arr.length; k++){  // n^2
    if(k==0){
      if(arr[k]<=arr[k+1]){
        minIndex=k;
        maxIndex=k+1;
      } else {
        minIndex=k+1;
        maxIndex=k;
      }
    } else{
      if(k>=2){
        if(arr[k]<arr[minIndex]){
          minIndex=k
        } else if(arr[k]>arr[maxIndex]){
          maxIndex=k
        }
      }
    }
  }
  var result={min:arr[minIndex], max:arr[maxIndex]}
  if(minIndex<=maxIndex){
    arr.splice(minIndex, 1);
    arr.splice(maxIndex-1, 1);
  } else{
    arr.splice(maxIndex, 1);
    arr.splice(minIndex-1, 1)
  }
  return result
}
function select(arr){
  var source=arr;
  var result=[];
  result.length=source.length;
  var length=source.length;
  for(var i=0; i<length/2; i++){  // n/2
    var min_max=minMax(source)
    if(typeof min_max === 'number'){
      result[i]=min_max;
      break;
    }
    var min=min_max.min;
    var max=min_max.max;
    result[i]=min;
    result[length-i-1]=max;
  }
  console.log(result)
}
var arr=[1,5,2,5,47,8,9,4,7];
select(arr)

时间复杂度:O(n^2)

三 交换排序

冒泡排序

function prop(arr){
  var length=arr.length;   for(var i=length-1; i>0; i--){ //n
    var exchange=true;
    for(var j=0; j<i; j++){ //n^2
      if(arr[j]>arr[j+1]){
        arr.splice(j, 2, arr[j+1], arr[j]);
        exchange=false
      }
    }
    if(exchange){
      break;
    }  
  }
  console.log(arr)
}
时间复杂度:O(n^2)
原文地址:https://www.cnblogs.com/zhaozhipeng/p/8067669.html