具体代码实现
/**
* 冒泡算法 go 实现
*/
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
// 获取随机数个数
randCount := 10
randRandMax := 100
// bucketMax := randRandMax + 1
// make 创建切片,已经初始化完毕。在append的话,前面值都为0
// randList := make([]int, randCount)
var randList []int
// 随机数中添加种子,可以保证每次执行,产生的随机数是“真的”随机
seed := rand.New(rand.NewSource(time.Now().UnixNano()))
for index := 0; index < randCount; index++ {
number := seed.Intn(randRandMax)
randList = append(randList, number)
}
fmt.Printf("原始列表[%d]: %v\n", len(randList), randList)
// 最外层表示一共循环的次数
for i := 0; i < len(randList)-1; i++ {
// 内层表示逐层比较的次数递减
for j := 0; j < len(randList)-1-i; j++ {
// 这里打印出来 i, j, j+1 来验证实际的冒泡 是相邻的两个数字做对比
// 并且对比次数是逐层递减的
fmt.Println(i, j, j+1)
// // sort Z -> A
// if randList[j] < randList[j+1] {
// randList[j], randList[j+1] = randList[j+1], randList[j]
// }
// sort A -> Z
if randList[j] < randList[j+1] {
randList[j], randList[j+1] = randList[j+1], randList[j]
}
}
fmt.Println("<-------------->")
// fmt.Println(i, randList[i])
}
fmt.Println("\n排序结束\n排序列表: ", randList)
}
结果展示
原始列表[10]: [58 52 40 0 38 67 12 22 74 18]
0 0 1
0 1 2
0 2 3
0 3 4
0 4 5
0 5 6
0 6 7
0 7 8
0 8 9
<-------------->
1 0 1
1 1 2
1 2 3
1 3 4
1 4 5
1 5 6
1 6 7
1 7 8
<-------------->
2 0 1
2 1 2
2 2 3
2 3 4
2 4 5
2 5 6
2 6 7
<-------------->
3 0 1
3 1 2
3 2 3
3 3 4
3 4 5
3 5 6
<-------------->
4 0 1
4 1 2
4 2 3
4 3 4
4 4 5
<-------------->
5 0 1
5 1 2
5 2 3
5 3 4
<-------------->
6 0 1
6 1 2
6 2 3
<-------------->
7 0 1
7 1 2
<-------------->
8 0 1
<-------------->
排序结束
排序列表: [74 67 58 52 40 38 22 18 12 0]
有疑问加站长微信联系(非本文作者)