归并排序属于分而治之的思想,对数组一分为二,分别对两部分排序,再做合并。有几个关键点:
1. 一分为二后,每部分做递归的归并排充,直到遇到一个元素为止。
2. 合并时一定是将两个排好序的子数组做合并,类似于插入排序。
算法实现如下:
这里面有两个问题:merge 插入排序时需要 make 一个辅助slice, 并做数据拷贝,对于大数组会 make 很多次,对GC有一定压力。插入排序时一定要处理好子数组边界问题。
20160706再好好想想能不能更高效? 特别是辅助slice,看能不能去掉。
归并排序属于分而治之的思想,对数组一分为二,分别对两部分排序,再做合并。有几个关键点:
1. 一分为二后,每部分做递归的归并排充,直到遇到一个元素为止。
2. 合并时一定是将两个排好序的子数组做合并,类似于插入排序。
算法实现如下:
这里面有两个问题:merge 插入排序时需要 make 一个辅助slice, 并做数据拷贝,对于大数组会 make 很多次,对GC有一定压力。插入排序时一定要处理好子数组边界问题。
20160706再好好想想能不能更高效? 特别是辅助slice,看能不能去掉。