Go语言实现冒泡排序

本文详细介绍了冒泡排序算法的工作原理,包括一次冒泡过程和六次排序全貌,重点讲解了如何通过判断是否交换来优化排序效率,并提供了Go语言实现的代码示例。同时,讨论了冒泡排序的空间复杂度、稳定性及时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序

冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。

一次冒泡排序的过程

六次冒泡排序的全过程

改进冒泡排序过程

当某次冒泡操作已经没有数据交换时,说明已经达到完全有序,不用再继续执行后续的冒泡操作。我这里还有另外一个例子,这里面给 6 个元素排序,只需要 4 次冒泡操作就可以了。

实现代码

func BubbleSort(array []int) []int {
	//当要排序的数组里的元素少于或等于1个时,说明不用再排序
	if len(array) <= 1 {
		return array
	}
	temp := 0
	for i := 0; i < len(array); i++ {
		//isFlag是提前退出循环的标志位,某一次遍历发现没有数据交换,说明数组中已然有序
		isFlag := false
		for j := 1; j < len(array)-i; j++ {
			if array[j] < array[j-1] {
				temp = array[j-1]
				array[j-1] = array[j]
				array[j] = temp
				isFlag = true
			}
		}
		if !isFlag {
			break
		}
	}
	return array
}

func main() {
	array := []int{39, 2, 5, 23, 54, 12, 78, 34, 45, 40}
	array = BubbleSort(array)
	for i, v := range array {
		fmt.Printf("下标为%d的值为%d", i, v)
		fmt.Println()
	}
}

总结

  1. 冒泡的过程只涉及相邻数据的交换操作,只需要常量级的临时空间,所以它的空间复杂度为 O(1),是一个原地排序算法。
  2. 在冒泡排序中,只有交换才可以改变两个元素的前后顺序。为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等的时候,我们不做交换,相同大小的数据在排序前后不会改变顺序,所以冒泡排序是稳定的排序算法。
  3. 最好情况下,要排序的数据已经是有序的了,我们只需要进行一次冒泡操作,就可以结束了,所以最好情况时间复杂度是 O(n)。而最坏的情况是,要排序的数据刚好是倒序排列的,我们需要进行 n 次冒泡操作,所以最坏情况时间复杂度为 O(n2)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值