冒泡排序(Bubble Sort)
冒泡排序是一种简单的比较类排序算法,通过重复交换相邻元素,将较大的元素逐步“冒泡”到序列末尾。
算法核心思想是多次遍历数组,每次比较相邻元素并交换,直到序列有序。
📌 算法原理解释
- 对数组进行多轮遍历;
- 每轮将相邻元素两两比较,如果前者大于后者则交换;
- 每轮遍历后,最大的元素移动到当前未排序序列末尾;
- 重复直到所有元素排序完成。
冒泡排序的时间复杂度最坏和平均均为 O(n²),但当数据近乎有序时,最好情况下可达 O(n)。
💻 多语言代码实现
// JavaScript 冒泡排序
function bubbleSort(arr) {
const n = arr.length;
for (let i = 0; i < n - 1; i++) {
let 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;
}
`
# Python 冒泡排序
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1):
swapped = False
for j in range(n - 1 - i):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
break
return arr
// C++ 冒泡排序
#include <vector>
using namespace std;
void bubbleSort(vector<int>& arr) {
int n = arr.size();
bool swapped;
for (int i = 0; i < n - 1; i++) {
swapped = false;
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
swapped = true;
}
}
if (!swapped) break;
}
}
// Java 冒泡排序
public class BubbleSort {
public static void bubbleSort(int[] arr) {
int n = arr.length;
boolean swapped;
for (int i = 0; i < n - 1; i++) {
swapped = false;
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if (!swapped) break;
}
}
}
<?php
// PHP 冒泡排序
function bubbleSort(array &$arr): array {
$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {
$swapped = false;
for ($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;
}
?>
// Go 冒泡排序
package main
func bubbleSort(arr []int) []int {
n := len(arr)
for i := 0; i < n-1; i++ {
swapped := false
for 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
}
✅ 算法特点与总结
| 属性 | 描述 |
|---|---|
| 时间复杂度 | 最坏/平均 O(n²),最好 O(n) |
| 空间复杂度 | O(1)(原地排序) |
| 稳定性 | ✅ 稳定 |
| 是否原地排序 | ✅ 是 |
📌 提示:冒泡排序适合教学、少量数据排序,实际大规模数据推荐更高效算法。
相关内容
- 基数排序(Radix Sort) 基数排序是一种非比较类排序,适用于整数或定长字符串。本文介绍 LSD 方式的基数排序算法,提供 JavaScript、Python、C++、Java、PHP、G...
- 选择排序(Selection Sort) 选择排序是一种简单直观的排序算法,通过反复选择最小元素放到前面实现排序。本文讲解算法原理,并提供 JavaScript、Python、C++、Java、PHP、...
- 插入排序(Insertion Sort) 插入排序是一种简单且高效的排序算法,适合部分有序数组排序。本文介绍算法原理,并提供 JavaScript、Python、C++、Java、PHP、Go 多语言示...
- 希尔排序(Shell Sort) 介绍希尔排序的原理和分组插入策略,适用于中等规模数据。附带 JavaScript、Python、C++、Java、PHP、Go 多语言实现代码,助你深入理解。
- 归并排序(Merge Sort) 介绍归并排序的分治法思想、稳定性特点和适用场景,附带 JavaScript、Python、C++、Java、PHP、Go 多语言实现及详细解析,帮助深入理解。
- 快速排序(Quick Sort) 讲解快速排序的分治思想与实现步骤,适合处理大规模数据,附带 JavaScript、Python、C++、Java、PHP、Go 多语言代码及详细说明