算法:冒泡排序(go语言)

4 篇文章 0 订阅

先讲冒泡排序理论:

冒泡排序,是从最后开始,两两对比,如果前面的数字大于后面的数字,则调换数字顺序。
如下图:
第一步:对比最后1位,和末2位,2<6,不操作。

1
2
3
4
5
6
7
8
9

接下来向前移动一位,对比末2,和末3 。1<2,不操作

1
2
3
4
5
6
7
8
9

接下来向前移动一位,对比末3,和末4 。

1
2
3
4
5
6
7
8
9

3>1,调换两个元素在数组中的位置,调换后的图形如下:

1
2
3
4
5
6
7
8
9

继续向前移动对比。
当第一轮结束时,图形如下:

1
2
3
4
5
6
7
8
9

此时,整个数组中,最小的数字移动到0号位。其他数字顺序不变。
** 此时完成第一轮冒泡 **

接下来,开始第二轮冒泡
由于最小的1已经移动到0,则下一轮排序,从最后1位–1号位。
也就是说,** 第二轮排序的数据如下图: **

1
2
3
4
5
6
7
8
9

我们需要排序的数字一共有9个,则,经过8轮排序,所有数字可以归位。
此时,时间复杂度计算公式为:9+8+7+6+5+4+3+2 = (9+2)*8/2
表示如下O(n**2/2)

再讲冒泡排序之代码实践:

package main

// 5,7,9,4,8,3,1,2,6,3

// 冒泡排序
func BubbleSort() {
	// 数组初始化
	sort_init := []int{5, 7, 9, 4, 8, 3, 1, 2, 6, 3}
	iter_print(sort_init...)

	for i := 0; i < len(sort_init)-1; i++ {
		for j := len(sort_init) - 1; j > i; j-- {
			if sort_init[j-1] > sort_init[j] {
				sort_init[j-1], sort_init[j] = sort_init[j], sort_init[j-1]
			}
		}
	}

	iter_print(sort_init...)
}

// 打印数组
func iter_print(sort_list ...int) {
	for i := 0; i < len(sort_list); i++ {
		print(sort_list[i], " ")
	}
	println()
}

func main(){
	BubbleSort()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值