网上遇到一个归并排序算法,对于里边...的使用不是很懂

来源:19-2 课程总结

脑子笨学不会

2019-02-21

网址在这: https://blog.csdn.net/qq_36520153/article/details/82894216

//这里使用"..."语法糖,这里是怎么实现递归归并的?对这里的实现逻辑不是很懂
result = append(result, right[n:]...) 
result = append(result, left[m:]...)
return result

}

那如果不使用语法糖,怎么实现自上而下的归并排序?
我现在自己写,只能实现把数组拆分成单个元素的数组并进行第一次归并,归并为含两个元素的有序数组,之后再怎么递归归并不会写了。问题在于怎么给归并好的有两个元素的数组分类,怎么把他们分类为左数组和右数组?

写回答

2回答

ccmouse

2019-02-21

再来简单说说如何分左右数组。归并排序就是把数组分左右两半,分别归并排序,然后把左右两个分别排好序的子数组归并。
分两半(假设输入slice叫a)只要算一个中间值m=len(a)/2,然后两边分别是a[:m]和a[m:]。请自行注意边界。
另外归并的过程通常需要额外的空间,比如同学例子里的result。
另外我go语言的另一门免费课也采用了多路归并外部排序作为示例。比内部归并排序复杂,不过说不定会有收获

0
1
脑子笨学不会
非常感谢!谢谢老师
2019-02-22
共1条回复

ccmouse

2019-02-21

首先谢谢同学的id:)
这个语法糖其实和整个算法不冲突。append需要的参数是第一个是一个slice,第二个及以后都是要添加的单个元素。...就是把right[n:]里的所有元素一个个添加到result里面。如果不用这个语法糖,那就要一个for循环,把right[n]中元素一个个append进去。这样的程序思路是一样的,其他部分都不用变。

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程