Skip to content
← 返回算法列表
问题与数据结构

冒泡排序 ​

排序

说明 ​

相邻逆序元素逐轮交换;时间 O(n²),适合教学而非大数据排序。

分析 ​

每轮比较相邻元素,较大的值逐步“冒泡”到未排序区间的末尾。实现简单且可稳定排序,但比较和交换数量随 n² 增长。

图解推演

以 [3,1,2] 为例,第一轮先交换 3 与 1,再交换 3 与 2,最大值 3 被推到右端。下一轮只检查未确定的前缀即可;若一轮没有任何交换,数组已经有序。仅在严格大于时交换才能保持相等记录的相对顺序。

查看图表代码

适用前提与边界 ​

真实项目通常直接使用 sort 包;该算法主要帮助理解局部交换与不变式。

示例输入与调用 ​

go
a := []int{3, 1, 2}
	BubbleSort(a)
	fmt.Println(a)

运行输出 ​

text
[1 2 3]

完整 Go 示例 ​

go
package main

import "fmt"

func BubbleSort(a []int) {
	for end := len(a); end > 1; end-- {
		for i := 1; i < end; i++ {
			if a[i-1] > a[i] {
				a[i-1], a[i] = a[i], a[i-1]
			}
		}
	}
}

func main() {
	a := []int{3, 1, 2}
	BubbleSort(a)
	fmt.Println(a)
}

继续阅读