关于讲解快速排序原理的网上有很多,这里直接贴代码了
public class Solution {
public void mergeSort(int[] nums) {
int[] temp = new int[nums.length];
sort(0, nums.length - 1, nums, temp);
}
public void sort(int left, int right, int[] nums, int[] temp) {
if (left >= right) return;
int medium = (left + right) / 2;
sort(left, medium, nums, temp);
sort(medium + 1, right, nums, temp);
merge(left, medium, right, nums, temp);
}
public void merge(int left, int medium, int right, int[] nums, int[] temp) {
int j = medium + 1;
int i = left;
for (int k = left; k <= right; k++) {
if (i > medium) {
temp[k] = nums[j];
j++;
} else if (j > right) {
temp[k] = nums[i];
i++;
} else if (nums[i] <= nums[j]) {
temp[k] = nums[i];
i++;
} else if (nums[j] < nums[i]) {
temp[k] = nums[j];
j++;
}
}
for (int k = left; k <= right; k++) {
nums[k] = temp[k];
}
}
}