js冒泡排序i++,i--两种方法

本文通过两个不同实现方式详细解析了冒泡排序算法的工作原理。一种是从数组头部开始比较并交换元素,另一种则是从尾部开始。这两种方法都展示了如何通过多重循环结构,逐步将数组中的元素按升序排列。
    <h5>冒泡i++</h5>
    <script>
        var a = [9, 5, 2, 7];
        for (var j = 0; j < a.length - 1; j++) {
            for (var i = 0; i < a.length - 1 - j; i++) {//以数组角标处的数字判断大小,从第一个数开始
                if (a[i] > a[i + 1]) {//如果前面的数大于后面的数
                    var temp = a[i];//则取个第三者,将前面的数和后面的数交换位置
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }
        }
        document.write(a);
    </script>
    <br><br>

    <h5>冒泡i--</h5>
    <script>
        var b = [9, 5, 2, 7];
        for (var j = 0; j < b.length - 1; j++) {
            for (var i = b.length - 1; i > 0; i--) {//以数组角标处的数字判断大小,从最后一个数开始
                if (b[i] < b[i - 1]) {//如果最后一位数小于它前面一位数
                    var temp = b[i];//则取个第三者,将前面的数和后面的数交换位置
                    b[i] = b[i - 1];
                    b[i - 1] = temp;
                }
            }
        }
        document.write(b);
    </script>
好的,这里为你提供两种版本的 JavaScript 冒泡排序实现:一种是最基本的经典冒泡排序,另一种是在经典版基础上进行了优化的改进版冒泡排序。 ### 经典冒泡排序 ```javascript function classicBubbleSort(arr) { const n = arr.length; for (let i = 0; i < n - 1; i++) { // 控制总的轮数 for (let j = 0; j < n - 1 - i; j++) { // 比较相邻元素 if (arr[j] > arr[j + 1]) { // 如果前面的大于后面的,则交换 [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; } } } return arr; } console.log(classicBubbleSort([64, 34, 25, 12, 22, 11, 90])); // 测试结果 ``` --- ### 改进版冒泡排序 在每次遍历过程中,如果发现没有任何交换发生,则说明数组已经是有序状态了,此时可以直接退出循环。这就是所谓的**标志位法**或称**提前结束法**。 ```javascript function optimizedBubbleSort(arr) { const n = arr.length; let swapped; // 标志变量 do { swapped = false; // 假设本趟无交换 for (let j = 0; j < n - 1; j++) { // 对当前未排部分进行逐一比较 if (arr[j] > arr[j + 1]) { // 发生逆序情况就交换 [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; swapped = true; // 设置标志为true表示有交换过数据 } } } while(swapped); // 只要还有交换继续下一轮检测 // 否则直接跳出完成排序任务 return arr; } console.log(optimizedBubbleSort([64, 34, 25, 12, 22, 11, 90])); // 输出已排序的结果 ``` 这两种方法都可以有效实现冒泡排序功能,但经过优化后的算法性能会有所提升,在某些特定条件下能够减少不必要的迭代次数,提高效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值