|
@@ -0,0 +1,70 @@
|
|
|
|
+package com.xs.leetcode.editor.en;
|
|
|
|
+
|
|
|
|
+import java.util.Optional;
|
|
|
|
+
|
|
|
|
+public class MergeSort {
|
|
|
|
+ private static int[] tmp;
|
|
|
|
+
|
|
|
|
+ private void merge(int[] nums, int beg, int mid, int end) {
|
|
|
|
+ int i = beg, j = mid + 1, k = beg;
|
|
|
|
+ while (k <= end) {
|
|
|
|
+ if(j > end || i <= mid && nums[i] <= nums[j]) {
|
|
|
|
+ tmp[k] = nums[i];
|
|
|
|
+ i++;
|
|
|
|
+ } else {
|
|
|
|
+ tmp[k] = nums[j];
|
|
|
|
+ j++;
|
|
|
|
+ }
|
|
|
|
+ k++;
|
|
|
|
+ }
|
|
|
|
+ System.arraycopy(tmp, beg, nums, beg, end - beg + 1);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void mergeSort(int[] nums, int beg, int end) {
|
|
|
|
+ if (beg >= end) return;
|
|
|
|
+ int mid = beg + (end - beg) / 2;
|
|
|
|
+ mergeSort(nums, beg, mid);
|
|
|
|
+ mergeSort(nums, mid + 1, end);
|
|
|
|
+ merge(nums, beg, mid, end);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void print(int[] nums) {
|
|
|
|
+ if (nums == null) {
|
|
|
|
+ System.out.println("the array is null");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ for (int i : nums) {
|
|
|
|
+ System.out.print(i + " ");
|
|
|
|
+ }
|
|
|
|
+ System.out.println();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void mergeSort(int[] nums) {
|
|
|
|
+ if (nums == null) return;
|
|
|
|
+ tmp = new int[nums.length];
|
|
|
|
+ mergeSort(nums, 0, nums.length - 1);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
+ MergeSort mergeSort = new MergeSort();
|
|
|
|
+ int[] nums = new int[]{4,1,3,2};
|
|
|
|
+ mergeSort.mergeSort(nums);
|
|
|
|
+ mergeSort.print(nums);
|
|
|
|
+
|
|
|
|
+ nums = new int[]{};
|
|
|
|
+ mergeSort.mergeSort(nums);
|
|
|
|
+ mergeSort.print(nums);
|
|
|
|
+
|
|
|
|
+ nums = new int[]{0};
|
|
|
|
+ mergeSort.mergeSort(nums);
|
|
|
|
+ mergeSort.print(nums);
|
|
|
|
+
|
|
|
|
+ nums = null;
|
|
|
|
+ mergeSort.mergeSort(nums);
|
|
|
|
+ mergeSort.print(nums);
|
|
|
|
+
|
|
|
|
+ nums = new int[]{5,5,5,2,7,8,9,0,1,2,3,4,3,2,1};
|
|
|
|
+ mergeSort.mergeSort(nums);
|
|
|
|
+ mergeSort.print(nums);
|
|
|
|
+ }
|
|
|
|
+}
|