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 }
}
}

posted on   进击的davis  阅读(477)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示