数组的插入排序和快速排序

116 阅读1分钟

数组的插入排序和快速排序

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,点击查看活动详情

数组的插入排序

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);