插入排序
插入排序
插入排序是一种简单直观的排序算法,它的工作原理是:通过构建有序的序列,将未排序的数据,在已排序序列中从后向前扫描,找到相应的位置并插入
算法的原理
- 数组的第一个元素是已经排序好的,从第二个元素开始
- 取出下一个元素,在已排序好的序列中从后向前进行比较
- 如果当前元素(current)小于前一个元素(arr[preIndex]),将前一个元素向后移动一位,空出前一个元素的位置(好让当前元素直接插入到对应的位置)
- 再将当前元素与前一个元素(arr[preIndex--])进行比较,知道找到当前元素的位置为止
- 找到之后直接将该元素插入到该位置之后
....... - 重复以上操作
![]()
具体的实现代码
function Insertion(arr){
let preIndex,
current;
for(let begin = 1; begin<arr.length;begin++){
preIndex = begin-1; //前一个元素的索引值
current = arr[begin] //存储当前的元素
while(preIndex >= 0 && arr[preIndex] > current){
//当前一位元素大于当前元素时,将这一项元素向后移一位
arr[preIndex+1] = arr[preIndex];
preIndex--; //让当前元素在于前一个比较
}
arr[preIndex+1] = current;
}
return arr;
}
时间复杂度与空间复杂度
最坏、平均时间复杂度:O(n2)
最好时间复杂度:O(n)
空间复杂度:O(1)
属于稳定排序
当逆序对的数量极少时,插入排序的效率特别高
什么是逆序对?
例如:数组<2,3,8,6,1>的逆序对为: <2,1><3,1><8,1><8,6><6,1>五对逆序对


浙公网安备 33010602011771号