冒泡排序的基本思想:通过对排序序列从后向前,依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后往前移动,就像水底的气泡一样向上冒
案例演示:
假设一个数组为:24,69,80,57,13
第1轮:
第1次排序后:(24与69进行比较)
24,69,80,57,13
第2次排序后:(69与80进行比较)
24,69,80,57,13
第3次排序后:(80与57进行比较,交换)
24,69,57,80,13
第4次排序后:(80与13进行比较,交换)
24,69,57,13,80
第2轮:
第1次排序后:(24与69进行比较)
24,69,57,13,80
第2次排序后:(69与57进行比较,交换)
24,57,69,13,80
第3次排序后:(69与13比较,交换)
24,57,13,69,80
第3轮:
第1次排序后:(24与57进行比较)
24,57,13,69,80
第1次排序后:(57与13进行比较,交换)
24,13,57,69,80
第4轮:
第1次排序后:(24与13进行比较,交换)
13,24,57,69,80
每轮实现:
第1轮:
package main
import "fmt"
// 冒泡排序
func bubbleSort(arr *[5]int) {
for j := 0; j < 4; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第1轮排序后:", (*arr))
}
func main() {
arr := [5]int{24,69,80,57,13}
bubbleSort(&arr)
}
第2轮:
package main
import "fmt"
// 冒泡排序
func bubbleSort(arr *[5]int) {
for j := 0; j < 4; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第1轮排序后:", (*arr))
for j := 0; j < 3; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第2轮排序后:", (*arr))
}
func main() {
arr := [5]int{24,69,80,57,13}
bubbleSort(&arr)
}
第3轮:
package main
import "fmt"
// 冒泡排序
func bubbleSort(arr *[5]int) {
for j := 0; j < 4; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第1轮排序后:", (*arr))
for j := 0; j < 3; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第2轮排序后:", (*arr))
for j := 0; j < 2; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第3轮排序后:", (*arr))
}
func main() {
arr := [5]int{24,69,80,57,13}
bubbleSort(&arr)
}
第4轮:
package main
import "fmt"
// 冒泡排序
func bubbleSort(arr *[5]int) {
for j := 0; j < 4; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第1轮排序后:", (*arr))
for j := 0; j < 3; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第2轮排序后:", (*arr))
for j := 0; j < 2; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第3轮排序后:", (*arr))
for j := 0; j < 1; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
fmt.Println("第4轮排序后:", (*arr))
}
func main() {
arr := [5]int{24,69,80,57,13}
bubbleSort(&arr)
}
总结规律得出最终代码:
package main
import "fmt"
// 冒泡排序
func bubbleSort(arr *[5]int) {
fmt.Println("排序前:", (*arr))
// 总结规律:先内层(每一轮)再外层,内层n-1-i次,外层n-1
for i := 0; i < len(*arr)-1; i++ {
for j := 0; j < len(*arr)-1-i; j++ {
temp := 0
if (*arr)[j] > (*arr)[j+1] {
temp = (*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
}
fmt.Println("排序后:", (*arr))
}
func main() {
arr := [5]int{24, 69, 80, 57, 13}
bubbleSort(&arr)
}