Go-冒泡排序

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] 升序
}

  

原文地址:https://www.cnblogs.com/2bjiujiu/p/14426607.html