归并排序
ref
算法原理
code
package AlgorithmPractice;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
int[] nums = new int[]{2, 3, 1, 5, 4};
int[] re = new MergeSort().getSort(nums);
System.out.println(Arrays.toString(re));
}
public int[] getSort(int[] nums) {
int[] temp = new int[nums.length];
mergeSort(nums, 0, nums.length - 1, temp);
System.out.println(Arrays.toString(temp));
return nums;
}
public void mergeSort(int[] nums, int start, int end, int[] temp) {
System.out.println(start + "," + end);
if (start >= end) return;
mergeSort(nums, start, (start + end) / 2, temp);
mergeSort(nums, (start + end) / 2 + 1, end, temp);
merge(nums, start, end, temp);
}
public void merge(int[] nums, int start, int end, int[] temp) {
int leftIdx = start;
int middle = (start + end) / 2;
int rightIdx = middle + 1;
int tempIdx = start;
while (leftIdx <= middle && rightIdx <= end) {
if (nums[leftIdx] < nums[rightIdx]) {
temp[tempIdx++] = nums[leftIdx++];
} else {
temp[tempIdx++] = nums[rightIdx++];
}
}
while (leftIdx <= middle) {
temp[tempIdx++] = nums[leftIdx++];
}
while (rightIdx <= end) {
temp[tempIdx++] = nums[rightIdx++];
}
for (int i = start; i <= end; i++) {
nums[i] = temp[i];
}
}
}