- 快速排序
public static void qSort(int[] arr, int left, int right){
if (left >= right) return;
int i = left - 1, j = right + 1;
int key = arr[left];
while (i < j){
while (arr[++i] < key);
while (arr[--j] > key);
if (i < j){
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
qSort(arr, left, j);
qSort(arr, j + 1, right);
}
- 归并排序
public static void merge(int[] nums, int left, int mid, int right, int[] temp){
for (int i = left; i <= right; i++) temp[i] = nums[i];
int i = left, j = mid + 1;
for (int k = left; k <= right; k++){
if (i > mid){
nums[k] = temp[j];
j++;
}
else if (j > right){
nums[k] = temp[i];
i++;
}
else if (temp[i] < temp[j]){
nums[k] = temp[i];
i++;
}
else{
nums[k] = temp[j];
j++;
}
}
}
public static void mergeSort(int[] nums, int left, int right, int[] temp){
if (left >= right) return;
int mid = left + (right - left) / 2;
mergeSort(nums, left, mid, temp);
mergeSort(nums, mid + 1, right, temp);
if (nums[mid] <= nums[mid + 1]) return;
merge(nums, left, mid, right, temp);
}