JS基础排序,选择排序 、冒泡排序、插入排序

211 阅读1分钟

选择排序

选择排序,顾名思义,始终选择第i个元素与数组其他未排序的元素进行比较,遇到比第i个元素小的,就进行交换,保持第i个元素是目前未排序的元素中最小的。 第一次循环,将最小的排到第一位,第二次循环,将第二小的排到第二位,以此类推

function selectSort(arr){
  var len = arr.length;//存储数组长度,以免循环中多次调用
  var minIndex;
  for(var i=0; i<len; i++){
    minIndex = i;//初始最小元素下标为i
    for(var j=i+1; j<len; j++){
      if(arr[j]<arr[minIndex]){
        minIndex = j;//遇到更小元素,修改minIndex为其下标
      }
    }
    [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
    //es6解构赋值,转换两个元素的值
  }
  return arr;
}

冒泡排序

冒泡排序,比较前后两个元素大小,符合条件即交换,每执行完一轮冒泡都可以将最大值排到最后

function bubbleSort(arr){
  var len = arr.length;
  for(var i=0; i<len; i++){
    for(var j=0; j<len-i-1; j++){
      if(arr[j]>arr[j+1]){
        [arr[j], arr[j+1]] = [arr[j+1], arr[j]];
        //es6解构赋值,转换两个元素的值
      }
    }
  }
  return arr;
}

插入排序

插入排序,始终将左侧看成一个已经排好的序列,循环之前保存需要插入的元素,与左侧序列逐一比较,符合条件,即可插入;不符合条件则将左侧序列往后移

function insertSort(arr){
  //将左侧看成一个已经排序好的数组
  var len = arr.length;
  for(var i=1; i<len; i++){
    var temp = arr[i];//保持需要插入的元素
    for(var j=i-1; j>=0; j--){
      if(arr[j]>temp){//不可插入,将元素向后移
        arr[j+1] = arr[j];
      }else{
        break;//可插入,直接跳出,终止循环,j停留在可插入位置上
      }
    }
    arr[j+1] = temp;//插入提取出来的元素,循环结束也会执行,即将元素插入到数组最前面
  }
  return arr;
}