插入排序的原理
每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表。
代码实现
初始版本实现
function insertSortFun(orgArr){
let tempArr = orgArr.slice();
for(let j = 1; j < tempArr.length; j++){
for(let i = j; i > 0; i--){
if(tempArr[i] < tempArr[i - 1]){
changeFun(tempArr, i, i - 1);
}
}
}
}
// 交换函数
function changeFun(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
复制代码
优化版本
function insertSortFun(orgArr){
let tempArr = orgArr.slice();
for(let j = 1; j < tempArr.length; j++){
for(let i = j; i > 0 && arr[i] < arr[i - 1]; i--){
changeFun(tempArr, i, i - 1);
}
}
}
// 交换函数
function changeFun(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
复制代码
算法效率
- 空间复杂度:O(1)的额外空间的排序
- 时间复杂度:O(n^2)