package algorithms;
import java.util.Arrays;
import java.util.Random;
public class MergeSorted {
public static void main(String[] args) {
int[] nums = new int[10];
Random rand = new Random();
for (int i = 0; i < 10; i++) {
nums[i] = rand.nextInt(100);
}
System.out.println(Arrays.toString(nums));
int[] sort = mergesort(nums, 0, nums.length - 1);
System.out.println(Arrays.toString(sort));
System.out.println(Arrays.equals(sort,nums));
}
public static int[] mergesort(int[] nums, int start, int end) {
if (start >= end) {
//重点易错
return new int[] { nums[start] };
}
int mid = (start + end) / 2;
int[] i1 = mergesort(nums, start, mid);
int[] i2 = mergesort(nums, mid + 1, end);
return merge(i1, i2);
}
public static int[] merge(int[] num1, int[] num2) {
int[] nums = new int[num1.length + num2.length];
int n1 = 0, n2 = 0, i = 0;
//易错,判断条件是这个
while (n1 != num1.length && n2 != num2.length) {
if (num1[n1] <= num2[n2]) {
nums[i] = num1[n1];
n1++;
i++;
} else {
nums[i] = num2[n2];
n2++;
i++;
}
}
if (n1 == num1.length) {
System.arraycopy(num2,n2,nums,i,num2.length-n2);
}else{
System.arraycopy(num1,n1,nums,i,num1.length-n1);
}
return nums;
}
}