冒泡排序
冒泡排序 ( Bubble Sort ),是排序算法中最简单的一种
一般都是我们新了解一门语言时拿来练手使用
今天也不例外,虽然用 C# 写过无数次的冒泡排序,但是毕竟换了一门语言,所以有必要再来实现一次
原理
1.冒泡
既然决定写文章记录,那么就要好好的写
我们说冒泡排序简单,那么为什么简单呢?就是因为容易理解
冒泡 Bubble,如其意,就像气泡一样,他会慢慢的从海底浮出水面
那么这一层一层的浮现也是我们冒泡排序的实现方式
2.原理
假设我们有如此数组 :
7 2 9 22 16 93 202 0 33 29 84
一共是 11 个数字
我们先给数字加上下标
7[0] 2[1] 9[2] 22[3] 16[4] 93[5] 202[6] 0[7] 33[8] 29[9] 84[10]
这里我们先假设要对数组进行从小到大的排序
那么首先:
- 最小的数字应该在第一位
那如何保证最小的数字在第一位呢?
其实就是谁小谁来的道理
3.思路
1.我们拿第一位 [0] 也就是 7 依次向后方数字做比较,直到出现比 7 小的数字后,将该数字
与 7 交换位置
如:第二位 [1] 也就是 2 就比 7 小,那么 [0] 位置由 2 来占据, 7 暂居第二位 [1]
2.此时数组 [0] 为 2 ,再按照 1. 中方式依次向后比较
3.当 [7] 0 时, 再次满足交换条件,2 与 0 交换位置
4.最终确认 0 即最小值 ,那么第一位置确认,就是 0
5.下一步确认第二位 [1] 值 … 重复上述步骤

代码
// 冒泡
func Bubble_Sort(slice []int/* 待排序的切片 */, order bool/* true : 正序; false : 倒序; */) {
/*
1. 本循环代表 依次与其后所有数作比较的索引
2. 由于最后一个数不用比较,所以 len(slice) - 1
*/
for i := 0; i < len(slice) - 1; i++ {
// 本循环代表 外层将要与哪一位作比较
for k := i +1; k < len(slice); k++ {
if (slice[i] > slice[k] && order) /* 从大到小 */ || (slice[i] <= slice[k] && !order ) /* 从小到大 */ {
slice[i], slice[k] = slice[k], slice[i]
}
}
}
}
结果
排序结果如图所示

本文详细介绍了冒泡排序的基本原理及其实现过程,并通过具体的例子帮助读者理解如何通过比较和交换来完成排序。提供了Go语言的实现代码。
289

被折叠的 条评论
为什么被折叠?



