JavaScript常用排序

44 阅读1分钟

冒泡排序

k == 01 次循环 确定了 [8] 的值
k == 12 次循环 确定了 [7][8] 的值
k == 23 次循环 确定了 [6][7][8] 的值
k == 34 次循环 确定了 [5][6][7][8] 的值
k == 45 次循环 确定了 [4][5][6][7][8] 的值
k == 56 次循环 确定了 [3][4][5][6][7][8] 的值
k == 67 次循环 确定了 [2][3][4][5][6][7][8] 的值
k == 78 次循环 确定了 [1][2][3][4][5][6][7][8] 的值
k == 89 次循环 确定了 [0][1][2][3][4][5][6][7][8] 的值

    Eg:
        var arr = [10, 20, 30, 40, 50];
        var n = 11;
        console.log('before:', arr);

        // 提取arr所有值,包括下标
        for (var k = 0; k < arr.length - 1; k++) {
            // 查看过程
            console.log(`这是第 ${k + 1} 轮循环(k == ${k})`)
            // 提取arr所有值,包括下标
            for (var i = 0; i < arr.length - 1 - k; i++) {
                
                // console.log(arr[i], arr[i + 1])
                // 判断两值之间的谁大谁小
                if (arr[i] > arr[i + 1]) {
                    // 数值交换
                    var temp = arr[i]
                    arr[i] = arr[i + 1]
                    arr[i + 1] = temp
                }
            }
        }
        console.log('after:',arr);

选择排序

第几次循环   假设谁是最小值     和谁交换    循环开始的值
k == 0           1               0           0               1
k == 1           2               1           1               2
k == 2           3               2           2               3
    
    Eg:
        var arr = [1, 0, 9, 0, 3, 8, 3, 1, 9, 8];
        console.log('before:', arr);

        // 提取arr所有值,包括下标
        for (var i = 0; i < arr.length; i++) {
            // 存储 i 的值(从 0 开始 ++),以此作为最小值的下标
            var minNum = i;
            // 判断两值之间的谁大谁小
            for (var j = i + 1; j < arr.length; j++) {
                // 如果最小下标的值 大于 下一个下标的值
                if (arr[minNum] > arr[j]) {
                    // 交换下标
                    minNum = j;
                }
                // 交换最小值到 minNum
                var temp = arr[i];
                arr[i] = arr[minNum];
                arr[minNum] = temp;

            }
        }
        console.log('after:',arr);