JavaScript——冒泡排序

冒泡排序原理

        我认为本质上其实就是将数组内相邻的两个元素进行比较,然后判断是否交换这两个变量的值,后面的元素依次执行。

我的思路:

  1. 外层循环控制趟数,里层循环控制每一趟的循环次数;
  2. 比较数组内相邻的两个元素,根据相应条件判断是否交换它们两个的值;
  3. 从第一组到最后一组,对每一组相邻的两个元素做同样的工作;每轮循环后,末尾的元素就会是最大或最小的数;
  4. 针对数组内所有的元素重复上述的操作(除了最后一个)直到没有任何一组数字需要比较为止,输出数组。

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>冒泡排序</title>
    <script>
        var arr = [220, 190, 140, 160, 150, 180, 170, 50, 150, 88, 108];
        for (var i = 0; i < arr.length; i++) { // 外层循环控制趟数
            for (var j = 0; j < arr.length - i; j++) {  // 里层循环控制每一趟的循环次数
                if (arr[j] < arr[j + 1]) { // 从大到小 改为 > 则从小到大排序
                    var temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        console.log(arr);
    </script>
</head>
<body>
</body>
</html>

结果:

 案例分析

从 1~30 中选出 5 个能被 2 整除的随机数,并对他们从大到小排序,最后输出一个数组。

方法1:

  1. 定义一个空数组 arr;
  2. 选取 1~30 中能被 2 整除的数加入数组 arr;
  3. 从中随机取 5 个数生成一个新数组 newArr;
  4. 从大到小进行冒泡排序并输出这个数组 newArr。

方法2:

  1. 定义一个空数组 arr;
  2. 从 1~30 中选出能被 2 整除的随机数放入数组 arr;
  3. 当数组长度为 5 时,跳出循环 break;
  4. 从大到小进行冒泡排序并输出数组。

代码1:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <script>
        var arr = [];
        var newArr = [];
        for (var i = 1; i <= 30; i++) {
            if (i % 2 == 0) {
                arr.push(i);
            }
            for (var k = 0; k < 5; k++) {
                newArr[k] = arr[Math.floor(Math.random() * arr.length)];
            }
        }
        for (var i = 0; i < newArr.length; i++) {
            for (var j = 0; j < newArr.length - i; j++) {
                if (newArr[j] < newArr[j + 1]) { // 从大到小
                    var temp = newArr[j];
                    newArr[j] = newArr[j + 1];
                    newArr[j + 1] = temp;
                }
            }
        }
        console.log(newArr);
    </script>
</head>
<body>
</body>
</html>

代码2:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <script>
        var arr = [];
        for (var i = 0; i <= 30; i++) {
            var a = Math.floor(Math.random() * 30) + 1
            if (a % 2 == 0) {
                arr.push(a);
            }
            if (arr.length == 5) {
                break;
            }
        }
        for (var i = 0; i < arr.length; i++) {
            for (var j = 0; j < arr.length - i; j++) {
                if (arr[j] < arr[j + 1]) { // 从大到小
                    var temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        console.log(arr);
    </script>
</head>
<body>
</body>
</html>

结果:

小结:上述方法只是我所知的思路,事实上肯定不止我写的这两个,而且冒泡排序还可以通过函数方法等来实现,目前我还不会,有兴趣的可以自行研究。

下面是我看到的一篇对冒泡排序分析很详细的博客:

冒泡排序(超详细)_@烟雨倾城ゝ的博客-CSDN博客_冒泡排序

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值