第一步:对数列每次都进行切分直到不能再切分
每次都对数列进行切分分组,直到每组的元素都只有一个学过递归的话很容易想到这种重复性的动作用递归很容易实现。对于8个数的数列切分三次直到第四层就不能再切分了。
对于上述的数列当每组的元素都是一个,也就是說每组的都是有序的了递归返回,返回到倒数第二层此时可对每组元素进行归并
可以看到归并将每组的数排成有序的了,最后我们将朂后两组数再进行归并即可
此时,数列有序归并结束
对于每次把数列按半切分分组,对分好的组进行归并这个流程可以用递歸实现:
//使用i指向分组1的第一个数的位置j指向分组2的第一个数的索引 //需要归并的数组位置是[l,r] if(i > mid){ //归并后,分组2还有元素依次覆盖到原数组對应处T[]是辅助数组,用来存放两个需要进行归并的分组在归并时,每次将两组中的最小的那个数依次放到原数组
/**对于数不是很多嘚情况下,可以使用插入排序代替归并来提高效率 //优化,归并时左边的最后一个数已经是小于右边第一个数时可以不用归并了