快速排序(QuickSort)
public class QuickSort {
public static void sort(int[] arr, int left, int right) {
if(left < right) {
int pivot = partition(arr, left, right);
sort(arr, left, pivot - 1);
sort(arr, pivot + 1, right);
}
}
public static int partition(int[] arr, int left, int right) {
int pivot = arr[right];
int i = left, j = left;
while (j < right) {
if(arr[j] <= pivot) {
swap(arr, i ++, j);
}
j ++;
}
swap(arr, i, right);
return i;
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] nums = {3, 4, 0, 2, 9, 3, 6, 8, 5};
sort(nums, 0, nums.length - 1);
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
}
}
归并排序
public class MergeSort {
public static int[] sort(int[] arr) {
int n = arr.length;
if(n < 2) {
return arr;
}
int mid = n >> 1;
int[] left = Arrays.copyOfRange(arr, 0, mid);
int[] right = Arrays.copyOfRange(arr, mid, n);
return merge(sort(left), sort(right));
}
public static int[] merge(int[] left, int[] right) {
int ll = left.length, rl = right.length;
int[] arr = new int[ll + rl];
int pl = 0, pr = 0, p = 0;
while (pl < ll && pr < rl) {
if(left[pl] < right[pr]) {
arr[p] = left[pl];
pl ++;
} else {
arr[p] = right[pr];
pr ++;
}
p ++;
}
while(pl < ll) {
arr[p] = left[pl];
p ++;
pl ++;
}
while(pr < rl) {
arr[p] = right[pr];
p ++;
pr ++;
}
return arr;
}
public static void main(String[] args) {
int[] nums = {3, 9, 1, 0, 5, 3, 9, 7, 2, 4};
int[] sorted = sort(nums);
for (int num : sorted) {
System.out.print(num + " ");
}
}
}