冒泡排序
排序
说明
相邻逆序元素逐轮交换;时间 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)
}继续阅读
- 算法推演
- 算法推演
- 算法推演