目录
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> 元素内。以上就是所有内容。