【前端面试题】冒泡排序&选择排序

冒泡排序、选择排序,作为前端面试题出场率还是挺高的。趁着工作不是很忙,就写了写。还顺带了解到了插入排序,也顺带写了下。

    // 冒泡排序  两两比较,大的放后面
    // [1, 3, 2, 5, 1]
    // 1: 3 => [1, 3, 2, 5, 1] => 3: 2 => [1, 2, 3, 5, 1] => 3: 5 => [1, 2, 3, 5, 1] => 5: 1 => [1, 2, 3, 1, 5]
    // 1: 2 => [1, 2, 3, 1, 5] => 2: 3 => [1, 2, 3, 1, 5] => 3: 1 => [1, 2, 1, 3, 5]
    // 1: 2 => [1, 2, 1, 3, 5] => 2: 1 => [1, 1, 2, 3, 5]
    // 1: 1 => [1, 1, 2, 3, 5]

    let arr = [1, 0, 0, -1, 100, 88, 1, 3, 2, 4, 5];

    function bubbleSort(arr) {
        for(let i=0; i<arr.length-1; i++) {
            for(let j=0; j<arr.length-i; j++) {
                if (arr[j]>arr[j+1]){
                    let ls = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = ls;
                }
            }
        }
    }
    // bubbleSort(arr)
    // console.log(arr)


    // 选择排序
    // 依次将第n位与后面的所有项进行比较, 并依次将最小值赋给第0项, 第1项 。。。
    // [1, 3, 2, 4, 5]

    // 1:3, 1:2, 1:4, 1:5 => [1, 3, 2, 4, 5]
    // 3:2 => [1, 2, 3, 4, 5] 接下来是 2:4 2:5  => [1, 2, 3, 4, 5]
    // 3:4 3:5  => [1, 2, 3, 4, 5]
    // 4:5  => [1, 2, 3, 4, 5]

    function choiceSort(arr) {
        for(let i=0; i<arr.length; i++) {
            let min = arr[i]
            for(let j=i; j<arr.length; j++) {
                if (arr[j]<min){
                    let ls = min;
                    min = arr[j]
                    arr[j] = ls;
                }
            }
            arr[i] = min;
        }
    }
// choiceSort(arr)
// console.log(arr)

// 插入排序
    // 将数组的第一项为新数组a 剩余的为另一数组b
    // b 与 a 进行循环比较 b中的每一项找到对应的位置 插入到 a 中
    // [1, 0, -11, 2, 22, 13, 44, 0]
    // [1]  [0, -11, 2, 22, 13, 44, 0]
    // [0, 1]  [-11, 2, 22, 13, 44, 0]
    // [-11, 0, 1]  [2, 22, 13, 44, 0]
    // [-11, 0, 1, 2]  [22, 13, 44, 0]
    // [-11, 0, 1, 2, 22]  [13, 44, 0]
    // [-11, 0, 1, 2, 13, 22]  [44, 0]
    // [-11, 0, 1, 2, 13, 22, 44]  [0]

    let arr2 = [1,1,1,0,0,0,-1,-11,-2,333,44,55,99,88,771, 0, -11, 2, 22, 13, 44, 0]function insertSort(arr) {
        let headArr = [arr[0]];
        let footArr = arr.slice(1);

        for (let i=0; i<footArr.length; i++) {
            let max = footArr[i];
            let idx = null;
            for (let j=0; j<headArr.length; j++) {
                if (max<headArr[j]) {
                    if (!idx && idx !== 0) {
                        idx = j
                    }
                }
            }
            if (idx !== null) {
                headArr.splice(idx,0,max)
            } else {
                headArr.push(max);
            }
        }
        return headArr;
    }
	console.log(insertSort(arr2))

前端小菜鸟,哪里写的不对,还请各位大佬快快指出,非常感谢。
转载请注明出处,谢谢。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值