插入排序是一种简单直观的排序算法,它的工作原理是:通过构建有序的序列,将未排序的数据,在已排序序列中从后向前扫描,找到相应的位置并插入
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>五对逆序对
原文:https://www.cnblogs.com/wen-Ya/p/14928095.html