冒泡排序
冒泡排序 ( 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]
}
}
}
}
结果
排序结果如图所示
有疑问加站长微信联系(非本文作者)