前端面试题 冒泡排序(有详细讲解)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            冒泡排序 找到最大的数据 放在数组的最后面
            【1】相邻的两个数据进行比较
            【2】如果前面的数据 比后面的数据大,这两个数据就交换

         */
        // var num1 = 10;
        // var num2 = 20;
        // num1 =20 num2 =10
        // var num3 = num1;
        // num1 = num2;
        // num2 = num3;
        // console.log(num1, num2);

        var arr = [10, 2, 34, 66, 5, 90, 6, 7];

        /* 
            i = 0  10 > 2 交换 [2, 10, 34, 66, 5, 90, 6, 7]  i++
            i = 1  10 > 34 不交换   [2, 10, 34, 66, 5, 90, 6, 7]  i++
            i = 2  34 > 66 不交换   [2, 10, 34, 66, 5, 90, 6, 7]  i++
            i = 3  66 > 5  交换   [2, 10, 34, 5, 66, 90, 6, 7]  i++
            i = 4  66 > 90  不交换  [2, 10, 34, 5, 66, 90, 6, 7]  i++
            i = 5  90 > 6   交换  [2, 10, 34, 5, 66, 6, 90, 7]  i++
            i = 6  90 > 7  交换  [2, 10, 34, 5, 66, 6, 7, 90]  i++
            i = 7 arr[7] 得到是最大值 , arr[i] > arr[i+1]
        
         */
        //  j < arr.length   外层循环需要循环7次 每一次执行外层循环都是找到一个最大值放在数组的后面
        // 人如果已经排序号6个数,剩下一个就是最小的值放在最前面的,不需要去对比
        // 不需要执行最后一次循环, 只执行6次循环  j < arr.length -1
        for (var j = 0; j < arr.length - 1; j++) {
            // arr.length = 8
            for (var i = 0; i < arr.length - j - 1; i++) {
                // 当i = 7 arr[7] > arr[8] 数组中不存在arr[8] 这个数据 ,不需要对比
                // 也就是说i = 7的时候不需要对比,这个循环不需要在执行
                if (arr[i] > arr[i + 1]) {
                    var temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp
                }
            }
        }

        // 完成一次循环,得到一个最大值,放在数组的最后面
        // for (var i = 0; i < arr.length - 0; i++) {
        //     if (arr[i] > arr[i + 1]) {
        //         var temp = arr[i];
        //         arr[i] = arr[i + 1];
        //         arr[i + 1] = temp
        //     }
        // }

        // 第二次对比,已经得到一个最大值放在最后面,最后一个值不需要比较,循环次数减-1
        // for (var i = 0; i < arr.length - 1; i++) {
        //     if (arr[i] > arr[i + 1]) {
        //         var temp = arr[i];
        //         arr[i] = arr[i + 1];
        //         arr[i + 1] = temp
        //     }
        // }`在这里插入代码片`
        // for (var i = 0; i < arr.length - 2; i++) {
        //     if (arr[i] > arr[i + 1]) {
        //         var temp = arr[i];
        //         arr[i] = arr[i + 1];
        //         arr[i + 1] = temp
        //     }
        // }
        console.log(arr);


    </script>
</body>

</html>

你可能感兴趣的:(面试题)