当前位置: 首页 > article >正文

冒泡排序基础与实现

目录

1. 原理图

​编辑

2. 什么是冒泡排序

3. 工作原理

3.1 具体步骤

3.2 时间复杂度

 3.3 空间复杂度

4. 代码实现

 5. 总结


1. 原理图

2. 什么是冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地遍历要排序的列表,比较相邻元素并根据需要交换它们的位置来工作。这个过程会持续进行,直到整个列表变得有序为止。由于其简单性,冒泡排序常用于教学目的,但它并不是最高效的排序算法,特别是在处理大数据集时。

3. 工作原理

冒泡排序的基本思想是重复地访问要排序的列表,一次比较两个元素,如果它们的顺序错误就交换它们的位置。每次遍历后,最大的未排序元素会被移动到列表的末尾,就像气泡逐渐浮到水面上一样,因此得名“冒泡排序”。

3.1 具体步骤

(1) 比较相邻的元素。如果前一个比后一个大,则交换它们。

(2) 对每一对相邻元素做同样的工作,从开始的第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

(3) 针对所有的元素重复以上的步骤,除了最后一个。

(4) 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

3.2 时间复杂度

(1) 最坏情况:O(n²),当输入数组完全逆序时,每次遍历都需要进行 n-1 次比较和可能的交换。

(2) 最好情况:O(n),如果输入数组已经是排序好的,那么只需要一次遍历即可完成排序。

(3) 平均情况:O(n²),这是因为它依赖于数据的初始状态。

 3.3 空间复杂度

O(1),因为这是一个原地排序算法,不需要额外的空间来存储数据。

4. 代码实现

下面是用 JavaScript 实现的冒泡排序算法。这个实现不仅包含了基本的排序逻辑,还加入了一个优化:如果在某一轮遍历中没有发生任何交换,就认为数组已经有序,从而提前终止排序过程。

<!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>Bubble Sort Example</title>
</head>
<body>
    <h1>JavaScript 冒泡排序示例</h1>
    <button onclick="runBubbleSort()">运行冒泡排序</button>
    <p id="result"></p>

    <script>
        function bubbleSort(arr) {
            let n = arr.length;
            let swapped;
            for (let i = 0; i < n - 1; i++) {
                swapped = false;
                // 内层循环控制相邻元素之间的比较
                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]];
                        swapped = true;
                    }
                }
                // 如果没有发生交换,说明数组已经有序,可以提前退出
                if (!swapped) break;
            }
            return arr;
        }

        function runBubbleSort() {
            // 示例数组
            const exampleArray = [64, 34, 25, 12, 22, 11, 90];
            // 执行冒泡排序
            const sortedArray = bubbleSort([...exampleArray]); // 使用扩展运算符创建副本以保持原数组不变
            // 显示结果
            document.getElementById('result').textContent = `原始数组: ${exampleArray}\n排序后的数组: ${sortedArray}`;
        }
    </script>
</body>
</html>

 5. 总结

当用户点击“运行冒泡排序”按钮时,会调用 bubbleSort 函数,执行冒泡排序,并将排序前后的数组显示在页面上的 <p> 元素内。以上就是所有内容。


http://www.kler.cn/a/500488.html

相关文章:

  • 2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)
  • 嵌入式C语言:二维数组
  • 音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流
  • Unity3d 基于Barracuda推理库和YOLO算法实现对象检测功能
  • 微服务的配置共享
  • C# OpenCV机器视觉:波形相似度
  • 深入解析 Spring AI 系列:剖析OpenAI接口接入组件
  • 3 前端: Web开发相关概念 、HTML语法、CSS语法
  • 解锁人工智能的核心:人工神经网络全面解析
  • 计算机网络——网络层-IP地址
  • 初学stm32 --- ADC模拟/数字转换器工作原理
  • ubuntu设置开机无需输入密码自启动todesk,内网穿透natapp
  • 【芯片封测学习专栏 -- 什么是 Chiplet 技术】
  • 数据结构与算--堆实现线段树
  • 专题 - STM32
  • AI在零售行业中的应用:提升顾客体验与运营效率
  • FastApi Swagger 序列化问题
  • Github 2025-01-12 php开源项目日报 Top10
  • C#用直线和曲线抗锯齿
  • GraphQL:强大的API查询语言
  • iOS 逆向学习 - iOS Application Publishing:应用发布
  • Linux下ext2文件系统
  • Kotlin 协程基础九 —— SharedFlow 与 StateFlow
  • 【复习小结】14-21