时间复杂度:O(n^2)
- 最好:O(n)
- 数组中数据有序,只需要遍历一次且不需要交换
- 最坏:O(n^2)
空间复杂度:O(1)
- 只需要一个额外空间用于数据交换
原理
比较两个相邻的数组元素,使起满足条件交换元素位置,直到n-1轮循环操作结束。
实现
- 从头部开始,比较相邻的两个元素
arr[j]
和arr[j+1]
,如果前一个元素比后一个元素大,进行数据交换。 - 下标向后移动,即使
j=j+1
,再次比较元素arr[j]
和arr[j+1]
,判断是否需要交换数据。 - 针对序列中每一对两两相邻的数据重复以上步骤,直到下标指向最后一个位置。
在每一轮循环中重复以上步骤 (1)(2)(3),直到 len-1 轮循环执行完毕。
// 冒泡排序、降序排序
func BubbleSort(slice []int) []int {
if len(slice) < 2 {
return slice
}
for i := 0; i < len(slice)-1; i++ {
for j := 0; j < len(slice)-1-i; j++ {
if slice[j] < slice[j+1] {
slice[j], slice[j+1] = slice[j+1], slice[j]
}
}
}
return slice
}