插入排序

/**
 * @function 插入排序
 * @desc 第一个元素默认是已排序元素,取出下一个元素和当前元素比较,如果当前元素大就交换位置。那么此时第一个元素就是当前的最小数,所以下次取出操作从第三个元素开始,向前对比,重复之前的操作。
 * 概括:把前面的元素当成一个数组,以第一个为基准开始排序,每次排序都是往前面的数组中插入一个新元素
 * 时间复杂度:1 + 2 + 3 + 4 + ... + n = n(n+1)/2  =>  O(n*n)
 * @param {原数组} arr 
 * @returns 处理过后的原数组
 */
function insertion (arr) {
  if (!Array.isArray(arr)) {
    return []
  }

  for (let i = 1; i < arr.length; i++) {
    for (let j = i - 1; j >= 0; j--) {
      if (arr[j] > arr[j + 1]) {
        // 借助中间变量,交换位置
        let temp = arr[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = temp
      }
    }
  }

  return arr
}

console.log(insertion([8, 1, 3, 2, 9, 5, 4, 0]))

posted on 2021-09-04 11:15  chinesedon007  阅读(47)  评论(0)    收藏  举报