func main() {
arr := [...]int{5, 4, 3, 2, 1}
fmt.Println("排序前", arr) //[5 4 3 2 1]
temp := 0
//第1轮(5会移动到最后1个位置)
for j := 0; j < len(arr) - 1; j++ {
if arr[j] > arr[j + 1] {
temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
fmt.Println("第1轮", arr) //[4 3 2 1 5]
//第2轮(4会移动到倒数第2个位置、比第1轮多减1是因为5已经确定不需要比较)
for j := 0; j < len(arr) - 1 - 1; j++ {
if arr[j] > arr[j + 1] {
temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
fmt.Println("第2轮", arr) //[3 2 1 4 5]
//第3轮(3会移动到倒数第3个位置、比第2轮多减1是因为4,5已经确定不需要比较)
for j := 0; j < len(arr) - 1 - 2; j++ {
if arr[j] > arr[j + 1] {
temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
fmt.Println("第3轮", arr) //[2 1 3 4 5]
//第4轮(2会移动到倒数第34位置、比第3轮多减1是因为3,4,5已经确定不需要比较)
for j := 0; j < len(arr) - 1 - 3; j++ {
if arr[j] > arr[j + 1] {
temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
fmt.Println("第4轮", arr) //[1 2 3 4 5]
//此时2,3,4,5都已经确定 5个数排序4个数的位置都已经确定所以排序完成 一共比较arr.length-1轮
//完整的代码
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]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
fmt.Println("排序后", arr) //[1 2 3 4 5]
}