【前端算法3】插入排序

/** 插入排序
 *  同一个数组,从第一个元素开始,该元素可以认为已经被排序
 *  取出下一个元素,在已经排序的元素序列中从后向前扫描
 *  如果当前值大于前一个值 让后一个值等于前一个值 否则跳出当前循环
 *
 *  注意点:(当前值大于前一个值 让后一个值等于前一个值)只交换了一半,while外层还需要交换另外一半
 * **/
function insertSort(arr) {
  let i = 1;
  let j,key;
  for (i; i < arr.length; i++) {
    j = i;
    key = arr[j];
    // while 是 将目标值从后往前 找插入的位置
    while (--j > -1) { // 如果 j = -1 则目标值比所有的已排序元素都小
      // 如果当前值大于前一个值
      if (arr[j] > key) {
        arr[j+1] = arr[j]; // 让后一个值等于前一个值
      } else {
        break; // 否则跳出当前循环
      }
    }
    arr[j+1] = key; // 与冒泡同理,让前一个值等于后一个值(两个值交换了位置)
  }
  return arr;
}
let arr = [2, 8, 4, 5, 3, 7, 6];
let res = insertSort(arr);
console.log(res);

猜你喜欢

转载自www.cnblogs.com/mailyuan/p/12217843.html
今日推荐