冒泡排序一直都是基础排序算法之一,在学习Go语言的时候,顺便把数据结构复习一下。
package main
import "fmt"
func main() {
arr := []int{8, 4, 2, 9, 10, -3, 3, 20, 15, -1}
BubbleSort3(arr)
fmt.Println(arr)
}
func BubbleSort(arr []int) {
length := len(arr)
for i := 0; i < length-1; i++ {
flag := true //若为true,则表示此次循环没有进行交换,也就是待排序列已经有序
for j := 0; j < length-1-i; j++ { //从上往下冒泡
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
flag = false
}
}
if flag {
break
}
}
}
func BubbleSort2(arr []int) {
length := len(arr)
for i := 0; i < length-1; i++ {
flag := true //若为true,则表示此次循环没有进行交换,也就是待排序列已经有序
for j := length-1-i; j > 0; j-- { //从下往上冒泡
if arr[j] < arr[j-1] {
arr[j], arr[j-1] = arr[j-1], arr[j]
flag = false
}
}
if flag {
break
}
}
}
func BubbleSort3(arr []int) {
length := len(arr)
for i := 0; i < length-1; i++ {
flag := true //若为true,则表示此次循环没有进行交换,也就是待排序列已经有序
for j := length-1; j > i; j-- { //从下往上冒泡
if arr[j] < arr[j-1] {
arr[j], arr[j-1] = arr[j-1], arr[j]
flag = false
}
}
if flag {
break
}
}
}
外层循环控制比较的次数,内层循环控制比较的位置。
参考:https://blog.csdn.net/tuobicui6522/article/details/80392566