算法:冒泡排序
算法 大约 1928 字算法演进
- 第一次从数组第
0
位索引开始遍历到数组最后一位将最大值置换至最后一位。 - 第二次从数组第
0
位索引开始遍历到数组最后第二位将最大值置换至最后第二位。 - 第三次从数组第
0
位索引开始遍历到数组最后第三位将最大值置换至最后第三位。 - 依此类推,重复
array.length-1
次循环。
[3 9 -1 10 -2]
第 1 次排序结果# [3 -1 9 -2 10]
第 2 次排序结果# [-1 3 -2 9 10]
第 3 次排序结果# [-1 -2 3 9 10]
第 4 次排序结果# [-2 -1 3 9 10]
演进示例代码
func Evolution() {
arr := []int{3, 9, -1, 10, -2}
fmt.Println(arr)
var temp = 0
for i := 0; i < len(arr)-1; i++ {
if arr[i] > arr[i+1] {
temp = arr[i+1]
arr[i+1] = arr[i]
arr[i] = temp
}
}
fmt.Println(arr)
for i := 0; i < len(arr)-1-1; i++ {
if arr[i] > arr[i+1] {
temp = arr[i+1]
arr[i+1] = arr[i]
arr[i] = temp
}
}
fmt.Println(arr)
for i := 0; i < len(arr)-1-2; i++ {
if arr[i] > arr[i+1] {
temp = arr[i+1]
arr[i+1] = arr[i]
arr[i] = temp
}
}
fmt.Println(arr)
for i := 0; i < len(arr)-1-3; i++ {
if arr[i] > arr[i+1] {
temp = arr[i+1]
arr[i+1] = arr[i]
arr[i] = temp
}
}
fmt.Println(arr)
}
冒泡排序代码
arr := []int{3, 9, -1, 10, -2}
fmt.Println(arr)
var temp = 0
for i := 0; i < len(arr)-1; i++ {
for j := 0; j < len(arr)-1-i; j++ {
if arr[j] > arr[j+1] {
temp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = temp
}
}
fmt.Println("第",i+1, "次排序结果#",arr)
}
优化后代码
增加判断:如果未发生过交换,则说明数组已经有序,可以结束程序。
arr := []int{-2, 3, 9, -1, 10}
fmt.Println(arr)
var temp = 0
for i := 0; i < len(arr)-1; i++ {
exchange := false
for j := 0; j < len(arr)-1-i; j++ {
if arr[j] > arr[j+1] {
temp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = temp
exchange = true
}
}
fmt.Println("第",i+1, "次排序结果#",arr)
if !exchange {
break
}
}
阅读 1023 · 发布于 2021-02-04
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
IDEA Debug 查看方法返回值阅读 3920
-
Java 并发编程之 AQS CyclicBarrier 源码解析阅读 1412
-
Android VideoView 黑屏处理阅读 5921
-
Spring 与 JPA 中的 @Transactional 注解的区别阅读 615
-
走进 Rust:配置 IDEA 开发环境阅读 6028
-
Vue 绑定多个参数阅读 486
-
GitHub 访问慢解决方案阅读 2584
-
Linux 使用 dig 查询 DNS阅读 1096
-
Vue mixins 复用组件功能阅读 530
-
MyBatis Cause: java.lang.IndexOutOfBoundsException: Index: 5, Size: 5阅读 6591