算法学习-排序-插入排序

2018-02-12  本文已影响0人  MacXin

原理

    直接插入排序的基本思想:每次将一个待排序的记录,按其keyword的大小插入到前面已经排好的子序列中的适当位置,直到所有记录插入完毕为止。

实现

    假设数组为A[0...n-1],

    1.初始时,A[0]自成1个有序区,无序区为A[1....n-1]。令i = 1;

    2.将A[i]并入当前的有序区A[0...i-1]中形成A[0...i]的有序区间;

    3.i++并反复第二步直到i == n-1,至此排序完毕。

效率分析

    稳定

    空间复杂度O(1)

    时间复杂度O(n2)

    最差情况:反序。须要移动n*(n-1)/2个元素

    最好情况:正序,不须要移动元素

    数组已是排序或者接近顺序。插入排序的效率最好的情况是O(n),最坏的情况执行时间和平均情况执行时间均为O(n2)

    通常插入排序呈现出二次排序算法中的最佳性能。

JavaScript

let arr1 = [2, 8, 3, 89, 67, 45]

function insertSort(arr){

  let newArr = []

  if(Array.isArray(arr) && arr.length>0){

    newArr = newArr.concat(arr)

    for(let i=0; i < arr.length; i++){

      let j = i

      let current = arr[i]

      while(j>0 && current < newArr[j-1]){

        newArr[j] = newArr[j-1]

        j--

      }

      newArr[j] = current

    }

  }

  return newArr

}

console.log('reArr===>', insertSort(arr1))

上一篇下一篇

猜你喜欢

热点阅读