/** 插入排序 * 同一个数组,从第一个元素开始,该元素可以认为已经被排序 * 取出下一个元素,在已经排序的元素序列中从后向前扫描 * 如果当前值大于前一个值 让后一个值等于前一个值 否则跳出当前循环 * * 注意点:(当前值大于前一个值 让后一个值等于前一个值)只交换了一半,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);
来源:https://www.cnblogs.com/mailyuan/p/12217843.html