一、原理
合并排序就是利用二分法的思想,将一个数组一分为二,然后继续递归式的继续划分小数组,直到划分到最后小数组中只剩下一个元素的时候,再递归回退合并排序起来,这样每次递归回退,就能将两个小数组合并为一个大数组,直到回退到最后合并并排序为一个大的数组
图例如下:

二、示例代码
public class MergeSort {
public static void main(String[] args) {
int[] nums = {2, 1, 7, 9, 5, 8};
sort(nums, 0, nums.length - 1);
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
private static void sort(int[] nums, int left, int ritht) {
if (left >= ritht)
return;
int mid = left + (ritht - left) / 2;
sort(nums, left, mid);
sort(nums, mid + 1, ritht);
merge(nums, left, mid, ritht);
}
//合并两个数组
private static void merge(int[] nums, int left, int mid, int ritht) {
int[] tmpNums = nums.clone();
int p = left;//用于指定左边数组的第一个元素位置
int q = mid + 1;//用于指定右边数组的第一个元素位置
for (int i = left; i <= ritht; i++) {
if (p > mid)
nums[i] = tmpNums[q++];
else if (q > ritht)
nums[i] = tmpNums[p++];
else if (tmpNums[p] < tmpNums[q])
nums[i] = tmpNums[p++];
else
nums[i] = tmpNums[q++];
}
}
}
1047

被折叠的 条评论
为什么被折叠?



