归并排序算法主要采用的是分治的思想,通过先分后治的方法来达到排序的目的。
具体代码如下:
private void mergeSort() {
int[] nums = {11, 44, 23, 67, 88, 65, 34, 48, 9, 12};
int[] temp = new int[nums.length];
mergeSort(nums, 0, nums.length - 1, temp);
}
private void mergeSort(int[] nums, int low, int high, int[] temps) {
if (low < high) {
int mid = (low + high) / 2;
mergeSort(nums, low, mid, temps);//先分左半部分
mergeSort(nums, mid + 1, high, temps);//再分右半部分
merge(nums, low, mid, high, temps);//再合并
System.out.println(low + "/" + mid + "/" + high);
}
}
private void merge(int[] nums, int low, int mid, int high, int[] temps) {
int i = 0;
int j = low, k = mid + 1;
while (j <= mid && k <= high) {
if (nums[j] < nums[k]) {
temps[i++] = nums[j++];
} else {
temps[i++] = nums[k++];
}
}
while (j <= mid) {
temps[i++] = nums[j++];
}
while (k <= high) {
temps[i++] = nums[k++];
}
for (int l = 0; l < i; l++) {
nums[low + l] = temps[l];
}
}
对应归并排序更详细的分析可以看这篇文章https://www.cnblogs.com/chengxiao/p/6194356.html
网友评论