1.思路
(1)从第一个元素开始,该元素可以认为已经被排序
(2)取出下一个元素,在已经排序的元素序列中从后向前扫描
(3)如果该元素(已排序)大于新元素,将该元素移到下一位置
(4)重复上一个步骤,直到找到已排序的元素小于或者等于新元素的位置
(5)将新元素插入到该位置后, 重复上面的步骤
比较次数: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