当前位置:首页 > JavaScript

js实现冒泡

2026-04-05 18:42:05JavaScript

冒泡排序算法实现

冒泡排序是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换位置,将较大的元素逐渐“冒泡”到数组末尾。

js实现冒泡

基础实现

function bubbleSort(arr) {
  const len = arr.length;
  for (let i = 0; i < len - 1; i++) {
    for (let j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
  }
  return arr;
}

优化版本

增加标志位减少不必要的遍历,当某次遍历没有发生交换时说明数组已有序。

js实现冒泡

function optimizedBubbleSort(arr) {
  const len = arr.length;
  let swapped;
  for (let i = 0; i < len - 1; i++) {
    swapped = false;
    for (let j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
        swapped = true;
      }
    }
    if (!swapped) break;
  }
  return arr;
}

双向冒泡排序

同时从左向右和从右向左进行冒泡,可以减少排序轮数。

function bidirectionalBubbleSort(arr) {
  let left = 0;
  let right = arr.length - 1;
  while (left < right) {
    for (let i = left; i < right; i++) {
      if (arr[i] > arr[i + 1]) {
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
      }
    }
    right--;
    for (let i = right; i > left; i--) {
      if (arr[i] < arr[i - 1]) {
        [arr[i], arr[i - 1]] = [arr[i - 1], arr[i]];
      }
    }
    left++;
  }
  return arr;
}

性能特点

  • 时间复杂度:最好情况O(n),最坏和平均情况O(n²)
  • 空间复杂度:O(1),原地排序算法
  • 稳定性:稳定排序算法,相同元素不会改变相对位置

冒泡排序适合小规模数据排序或教学演示,实际应用中更高效的排序算法如快速排序、归并排序更为常用。

标签: js
分享给朋友:

相关文章

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js 实现超链接

js 实现超链接

使用 HTML 的 <a> 标签 在 JavaScript 中动态创建超链接可以通过操作 DOM 实现。通过 document.createElement 创建一个 <a> 元…

js实现放大缩小

js实现放大缩小

使用 CSS transform 实现缩放 通过修改元素的 transform 属性实现平滑缩放效果。CSS 的 scale() 函数可以轻松调整元素大小。 const element = docu…