编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

js 算法题中冒泡排序案例笔记(js实现冒泡排序代码)

wxchong 2024-08-24 01:39:58 开源技术 9 ℃ 0 评论
  • 比较所有相邻元素,如果第一个比第二个大就交换他们
  • 执行一次后可以保证最后一个数字是最大的
  • 重复执行 n-1 次,就可以完成排序
// 时间复杂度 O(n ^ 2) n为数组长度
// 空间复杂度 O(1) 
Array.prototype.bubbleSort = function () {  
  for (i = 0; i < this.length - 1; i++) {  
    for (let j = 0; j < this.length - 1 - i; j++) {  
      if (this[j] > this[j + 1]) {  
        // 交换数据 
        [this[j], this[j + 1]] = [this[j + 1], this[j]];  
      }  
    }  
  }  
}  

以下是一个JavaScript实现冒泡排序的案例:

function bubbleSort(arr) {
    var len = arr.length;
    for (var i = 0; i < len - 1; i++) {
        // 提前退出冒泡循环的标志位
        var flag = false;
        for (var j = 0; j < len - 1 - i; j++) {
            // 如果当前元素比下一个元素大,则交换它们的位置
            if (arr[j] > arr[j + 1]) {
                var temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                flag = true;  // 表示有数据交换
            }
        }
        // 如果在一轮遍历中没有发生过交换,则数组已经有序,提前退出
        if (!flag) break;
    }
    return arr;
}

// 测试
var arr = [5, 3, 8, 4, 6];
console.log(bubbleSort(arr));  // 输出: [3, 4, 5, 6, 8]

在这个代码中,外层循环控制遍历的轮数,内层循环则负责每轮中的元素比较和交换。通过设置一个标志位flag来判断在一轮遍历中是否发生了交换,如果没有发生交换(即数组已经有序),那么就提前结束冒泡过程,从而优化了算法效率。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表