1.思路

(1)从第一个元素开始,该元素可以认为已经被排序

(2)取出下一个元素,在已经排序的元素序列中从后向前扫描

(3)如果该元素(已排序)大于新元素,将该元素移到下一位置

(4)重复上一个步骤,直到找到已排序的元素小于或者等于新元素的位置

(5)将新元素插入到该位置后, 重复上面的步骤

2.复杂度

  比较次数:O(N^2)

  交换次数:O(N)

3.代码实现

function ArrayList(){
  this.array = []

  ArrayList.prototype.insert = function(item){
    this.array.push(item)
  }

  ArrayList.prototype.insertionSort = function(){
    let length = this.array.length
    for(let i=1; i<length; i++){
      let j = i
      let temp = this.array[i]
      while(j>0 && this.array[j-1]>temp){
        this.array[j] = this.array[j-1]
        j--
      }
      this.array[j] = temp
    }
  }
}
// 测试
var list = new ArrayList()
list.insert(3)
list.insert(6)
list.insert(4)
list.insert(2)
list.insert(11)
list.insert(10)
list.insert(5)
list.insertionSort()
console.log(list)    // 2,3,4,5,6,10,11
posted on 2021-03-17 20:09  李起桉  阅读(71)  评论(0编辑  收藏  举报