冒泡排序
冒泡排序 ( 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] } } } } 结果
排序结果如图所示
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。