golang实现冒泡排序的三种方法
今天重温排序的一些简单方法-冒泡排序,了解排序的同学们应该知道,冒泡排序是一种朴素的排序方法,通常我们都会用2个for-loop搞定,第一层遍历每个元素,第二层则遍历前面的元素,第一层每次循环后,都会把当次遍历的最大值移动到数组的后面位置,数组后几位即成升序的状态。
根据冒泡排序的方法论,整理出以下关于冒泡排序的方法:
- 通常冒泡排序
- 递归的冒泡排序
- 带剪枝的冒泡排序
下面是代码:
package main import ( "fmt" "math/rand" "time" ) func main() { nums := genRandomIntSlice(10) fmt.Println(nums) nums1 := make([]int, 10) copy(nums1, nums) nums2 := make([]int, 10) copy(nums2, nums) nums3 := make([]int, 10) copy(nums3, nums) // 1.general bubble sort fmt.Printf("before sort, nums1: %v\n", nums1) bubbleSort1(nums1) fmt.Printf("after sort, nums1: %v\n", nums1) // 2.bubble sort with recursive fmt.Printf("before sort, nums2: %v\n", nums2) bubbleSort2(nums2) fmt.Printf("after sort, nums2: %v\n", nums2) // 3.bubble sort with prune fmt.Printf("before sort, nums3: %v\n", nums3) bubbleSort3(nums3) fmt.Printf("after sort, nums3: %v\n", nums3) } func genRandomIntSlice(cnt int) []int { rand.Seed(time.Now().UnixNano()) nums := make([]int, cnt) for i := 0; i < 10; i++ { nums[i] = rand.Intn(100) } return nums } // general bubble sort func bubbleSort1(nums []int) { if len(nums) < 2 { return } for i := 0; i < len(nums); i++ { for j := 0; j < len(nums)-i-1; j++ { if nums[j] > nums[j+1] { nums[j], nums[j+1] = nums[j+1], nums[j] } } } } // bubble sort with recursive func bubbleSort2(nums []int) { if len(nums) < 2 { return } bubbleSort_(nums, len(nums)-1) } func bubbleSort_(nums []int, n int) { if n < 2 { return } for i := 0; i < n; i++ { if nums[i] > nums[i+1] { nums[i], nums[i+1] = nums[i+1], nums[i] } } bubbleSort_(nums, n-1) } // bubble sort with prune func bubbleSort3(nums []int) { length := len(nums) for i := 0; i < length; i++ { flag := true for j := 0; j < length-i-1; j++ { if nums[j] > nums[j+1] { flag = false nums[j], nums[j+1] = nums[j+1], nums[j] } } if flag { break } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App