golang-merge-sort-recursive

freedbg · · 197 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
```go package main import ( "fmt" ) func main() { var arr = []int{6, 5, 3, 1, 8, 7, 2, 4, 9} var tmp = make([]int, len(arr), len(arr)) start := 0 end := len(arr) fmt.Println(arr) MergeSortRecursive(arr, tmp, start, end-1) fmt.Printf("finish :%v \n", arr) fmt.Printf("finish :%v \n", tmp) } func MergeSortRecursive(arr []int, tmp []int, start int, end int) { fmt.Printf("run : %d-%d\n", start, end) if start >= end { return } fmt.Printf("runing : %d-%d\n", start, end) var start1 int = start var end1 int = (end-start)>>1 + start1 var start2 int = end1 + 1 var end2 int = end var k = start1 MergeSortRecursive(arr, tmp, start1, end1) MergeSortRecursive(arr, tmp, start2, end2) for ; start1 <= end1 && start2 <= end2; k++ { if arr[start1] < arr[start2] { tmp[k] = arr[start1] start1++ } else { tmp[k] = arr[start2] start2++ } fmt.Println(tmp) } for ; start1 <= end1; k++ { tmp[k] = arr[start1] start1++ fmt.Println(tmp) } for ; start2 <= end2; k++ { tmp[k] = arr[start2] start2++ fmt.Println(tmp) } for i := start; i <= end; i++ { arr[i] = tmp[i] tmp[i] = 0 // unsort := append([]int{}, arr[end:]...) // tmp2 := tmp[i:end] // arr = append(append(arr[i:], tmp2[0:]...), unsort[0:]...) } fmt.Printf("last arr: %v\n", arr) return } ``` 递归版 请大神看看,有没有更好的写法,处理注释部分所在的那段循环代码,最好有内存拷贝这样的函数

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

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