算法:冒泡排序
算法 About 1,928 words算法演进
- 第一次从数组第
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
}
}
Views: 1,389 · Posted: 2021-02-04
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...