JS实现冒泡排序

// 冒泡排序
// 解析:
// 1.比较相邻的两个元素,如果前一个比后一个大,则交换位置。
// 2.第一轮的时候最后一个元素应该是最大的一个。
// 3.按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较。
//平均时间复杂度 O(n²);
//最好情况 O(n);
//最坏情况 O(n²);
//空间复杂度 O(1);
//排序方式:in-place
//稳定性:稳定


const elements = [1, 3, 5, 6, 2, 4, 9, 7, 8, 100, 99];

// elements.sort(function(a, b) {
//     return a - b;
// });

console.log(elements);

function sort(el) {
    const length = el.length;
    for(var i = 0; i < length; i++) {
        for(var j = 0; j < length-1; j++) {
            if(el[j] > el[j+1]) {
                const maxEl = el[j];
                el[j]   = el[j+1];
                el[j+1] = maxEl;
            }
        }
    }
    return el;
}

console.log(sort(elements))
### 使用 JavaScript 实现冒泡排序算法 冒泡排序是一种简单的排序算法,其核心思想是比较相邻的元素并根据条件交换它们的位置。以下是基于提供的引用内容以及标准实现方式的具体说明。 #### 冒泡排序的核心逻辑 冒泡排序通过多次遍历数组完成排序操作。对于长度为 `n` 的数组: - 外层循环控制排序轮数,总共需要执行 `n-1` 轮。 - 内层循环负责每一轮中相邻元素的比较和可能的交换,随着已排序部分的增长,内层循环的范围逐渐缩小。 #### 完整代码示例 以下是一个完整的 JavaScript 实现: ```javascript function bubbleSort(arr) { let n = arr.length; for (let i = 0; i < n - 1; i++) { // 控制排序轮数 for (let j = 0; j < n - i - 1; j++) { // 每轮比较次数减少 if (arr[j] > arr[j + 1]) { // 如果前一个元素大于后一个元素则交换 let temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } // 测试代码 let array = [4, 23, 100, 9, 7, 49, 36, 57]; console.log("原始数据:" + array); bubbleSort(array); console.log("最终排序:" + array); ``` 此代码展示了如何逐步将较大的元素移动到数组右侧,从而完成从小到大的排序过程[^1]。 #### 动态演示版本 如果希望在网页上展示排序过程,可以使用以下代码片段: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>冒泡排序动态演示</title> <script> window.onload = function() { var arr = [2, 4, 3, 1, 5]; document.getElementById('output').innerHTML += '初始数组: [' + arr.join(', ') + ']<br>'; for (var i = 0; i < arr.length - 1; i++) { for (var j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } document.getElementById('output').innerHTML += '第' + i + '次排序: [' + arr.join(', ') + ']<br>'; } document.getElementById('output').innerHTML += '最终结果: [' + arr.join(', ') + ']'; }; </script> </head> <body> <div id="output"></div> </body> </html> ``` 这段 HTML 和 JavaScript 结合的代码可以在浏览器中运行,并显示每次排序后的状态[^2]。 #### 排序优化 虽然基本版的冒泡排序能够正常工作,但在某些情况下可以通过检测是否发生过交换来提前终止排序流程,提高效率。改进后的代码如下: ```javascript function optimizedBubbleSort(arr) { let n = arr.length; let swapped; do { swapped = false; for (let j = 0; j < n - 1; j++) { if (arr[j] > arr[j + 1]) { let temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; swapped = true; } } n--; // 缩小未排序区域 } while (swapped); return arr; } ``` 这种优化减少了不必要的迭代,在最佳情况下的时间复杂度可达到 O(n)[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值