基本思路:
1.整体分为分 - 治
2.分,怎么分?通过递归向下分,到只有两个数比较为止
3.治,如何治?递归回溯向上合并,在分到最底部开始,
a.比较两个数大小,并使用一个临时数组temp临时储存
b.如果两个序列(最少有1个值)比较完,一方序列还有值,就将剩余的全部放到临时数组temp
c.将临时数组的值再copy到原数组
上图:
下面这张图是回溯上去后最后一次合并,并不是只有一次合并
再来看上图,这次排序其实有数组长度-1次合并,分别是8 4,5 7,1 3,6 2,48 57,13 26以及下面图中的最后一次合并 4578 1236
结合代码分析,再看不明白可以自己debug走几遍就清晰了
//拆分在合并 public static void diguisort(int left,int right,int nums[],int temp[]){ if (left我们再来测试一波:
int num[]=new int[800000]; int temp[]=new int[num.length]; for (int i = 0; i80w数据不到200ms,跟我一样快!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)