数组的插入排序
let arr = [12, 8, 15, 16, 1, 24];
// 1.先抓第一张到手里「handle也需要是一个数组」
let handle = [];
handle.push(arr[0]);
// 2.依次去抓桌面上剩下的牌
for (let i = 1; i < arr.length; i++) {
// A是当前新抓的牌
let A = arr[i];
// 3.用每一次新抓的牌A和手里的牌handle进行逐一比较「从后向前比」
for (let j = handle.length - 1; j >= 0; j--) {
// B是取出来的需要和A进行比较的,手里的某张牌
let B = handle[j];
// 4.如果A>B,需要把新抓的牌A放在B的后面
if (A > B) {
handle.splice(j + 1, 0, A);
// 已经放在手中了,则没必要在和手里其它牌比了,继续抓下一张牌去
break;
}
// 5.如果和手里的牌都比完了,发现A没有比手里的任何牌大,我们把A放在最前面即可
if (j === 0) {
handle.unshift(A);
}
}
}
console.log(handle);
数组的快速排序
const quick = function quick(arr) {
// 4.结束条件:如果传递的数组小于一项,则无需再拆了
if (arr.length <= 1) return arr;
// 1.取出数组中间项
let middleIndex = Math.round(arr.length / 2),
middleValue = arr.splice(middleIndex, 1)[0];
// 2.创建左右两个数组,用原始数组剩下的项和中间项比较,比中间项小的放在左边,大的放在右侧数组中
let arrLeft = [],
arrRight = [];
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
item > middleValue ? arrRight.push(item) : arrLeft.push(item);
}
// 3.把左边的、中间项、右侧的拼接在一起即可
return quick(arrLeft).concat(middleValue, quick(arrRight));
};
let arr = [12, 8, 15, 16, 1, 24];
arr = quick(arr);
console.log(arr);
数组冒泡排序
https://www.yuque.com/go/doc/43757330