package main import "fmt" // 冒泡排序:第一个元素和第二个元素比较值大小,如果第一个元素大于第二个元素则交换位置否则不交换,然后第二个元素与第三个元素比较大小,依次论推 // 思路: // 1. 如果第一个元素大于第二个元素,交换位置 // 2. 对数组进行一次完整交换 // 3. 对数组进行多次完整交换 // 特征: 每完成一次遍历交换,要么将最小或者将最大放到最后,类似鱼吐泡泡,所以称为冒泡排序 // 支持排序的对象: // 1. 所以元素类型相同,并支持可比较 // 2. 元素位置有顺序 // 3. 元素支持交换位置 // 排序思维: 事情的重要性、操作流程 func bubble(nums []int) { // j 需要经历的循环次数 for j := 0; j < len(nums)-1; j++ { // hasExchanged 优化方案,如果一次交换都没发送则认为是已经排好序的 hasExchanged := false for i := 0; i < len(nums)-1-j; i++ { // 交换 if nums[i] > nums[i+1] { nums[i], nums[i+1] = nums[i+1], nums[i] hasExchanged = true } } if !hasExchanged { break } } } func main() { data := []int{22, 33, 11, 23, 55, 4, 33, 45, 23} bubble(data) fmt.Println(data) // [4 11 22 23 23 33 33 45 55] 升序 }