插入排序的思想:跟斗地主抓牌类似。一张一张的抓,先抓一张,后面再抓的牌和当前手里已经有的牌一张一张进行比较,如果新抓的牌比某张牌大,就用[].splict(开始索引,删除长度,插入元素)方法,在新数组中插入。
原数组:
var arr = [6, 5, 4, 3, 2, 1];
排序函数:
function insert(arr) { let newArr = []; //保存抓到的第一张牌 newArr.push(arr[0]); // 从第二项开始依次抓牌,一直把台面上的牌抓光 for (let i = 1; i < arr.length; i++) { let A = arr[i]; // A是新抓的牌,从后向前比较 for (let j = newArr.length - 1; j >= 0; j--) { let B = newArr[j]; // B是当前比较的牌 // 如果当前新牌A比要比较的牌B大,就把A放到B的后面 if (A > B) { newArr.splice(j + 1, 0, A); break; } // 已经比到第一项,我们把新牌放到手中最前面 if (j === 0) { newArr.unshift(A); } } } return newArr; }
输出:
var nArr = insert(arr); console.log(nArr); // [1, 2, 3, 4, 5, 6]