go 归并排序

letterbeezps · · 850 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# go 归并排序 归并排序也是分治的一种思路。 1. 将数组分为有序的两部分 2. 将有序的两个子数组合并为一个有序数组 ## code ```go package main import "fmt" func main () { numbers := []int{5,1,9,2,6,3,9,4,1,6,3,7} fmt.Printf("before arr is: %v\n", numbers) res := mergeSort(numbers) fmt.Printf("after arr is: %v\n", res) } // 返回一个有序切片 func mergeSort(arrs []int) []int { n := len(arrs) // 当切片只有一个元素的时候,那该切片就是有序的 if n < 2 { return arrs } // 继续分治 mid := n / 2 left := arrs[:mid] right := arrs[mid:] return merge(mergeSort(left), mergeSort(right)) } // merge将两个有序的数组合并成一个有序数组 func merge(left []int, right []int) []int { res := make([]int, 0) L_left := len(left) L_right := len(right) i, j := 0, 0 // 先取二者最优 for i < L_left && j < L_right { if left[i] <= right[j] { res = append(res, left[i]) i++ } else { res = append(res, right[j]) j ++ } } // 补上剩下的尾巴 if i < L_left { res = append(res, left[i:]...) } if j < L_right { res = append(res, right[j:]...) } return res } ``` ## 结果展示 before arr is: [5 1 9 2 6 3 9 4 1 6 3 7] after arr is: [1 1 2 3 3 4 5 6 6 7 9 9]

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

850 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传