/** 插入排序
* 同一个数组,从第一个元素开始,该元素可以认为已经被排序
* 取出下一个元素,在已经排序的元素序列中从后向前扫描
* 如果当前值大于前一个值 让后一个值等于前一个值 否则跳出当前循环
*
* 注意点:(当前值大于前一个值 让后一个值等于前一个值)只交换了一半,while外层还需要交换另外一半
* **/
function insertSort(arr) {
let i = 1;
let j,key;
for (i; i < arr.length; i++) {
j = i;
key = arr[j];
// while 是 将目标值从后往前 找插入的位置
while (--j > -1) { // 如果 j = -1 则目标值比所有的已排序元素都小
// 如果当前值大于前一个值
if (arr[j] > key) {
arr[j+1] = arr[j]; // 让后一个值等于前一个值
} else {
break; // 否则跳出当前循环
}
}
arr[j+1] = key; // 与冒泡同理,让前一个值等于后一个值(两个值交换了位置)
}
return arr;
}
let arr = [2, 8, 4, 5, 3, 7, 6];
let res = insertSort(arr);
console.log(res);