1 思路
归并排序采用了经典的分治策略,通过递归求解。
要解决的问题就分为“分”和“治”两个步骤。
分的阶段可以看做递归拆分子序列的过程,递归深度为log2N。
治的阶段也就是归并的阶段,将拆分开的子序列,相邻的两两合并。
时间复杂度 O(nlogn)
2 模板
1.分治合并
public static void mergeSort(int nums[], int first, int last, int temp[])
{
if (first < last){
int mid = (first + last) / 2;
mergeSort(nums, first, mid, temp); //左边有序
mergeSort(nums, mid + 1, last, temp); //右边有序
mergeArray(nums, first, mid, last, temp); //再将二个有序数列合并
}
}
2.合并部分代码
public static void mergeArray(int nums[], int first, int mid, int last, int temp[])
{
//i是左边有序数组索引,j是右边有序数组索引,k是temp数组索引,
//为了便于理解保持temp和nums的索引范围相同
int i = first, j = mid +