Go语言冒泡排序(全网最详细)

冒泡排序的基本思想:通过对排序序列从后向前,依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后往前移动,就像水底的气泡一样向上冒

案例演示:

假设一个数组为: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)
}

猜你喜欢

转载自blog.csdn.net/qq2942713658/article/details/113029588
今日推荐