归并排序
public class MergeSort {
public static void main(String[] args) {
int[] data = new int[]{6, 5, 4, 3, 2, 1};
mergeSort(data, 0, data.length - 1);
System.out.println();
}
public static void mergeSort(int[] data, int p, int r) {
if (p >= r) {
return;
}
int q = (p + r) / 2;
mergeSort(data, p, q);
mergeSort(data, q + 1, r);
merge(data, p, q, r);
}
private static void merge(int[] data, int p, int q, int r) {
int i = p;
int j = q + 1;
int k = 0;
int[] tmp = new int[r - p + 1];
while (i <= q && j <= r) {
if (data[i] <= data[j]) {
tmp[k++] = data[i++];
} else {
tmp[k++] = data[j++];
}
}
int start = i;
int end = q;
if (j < r) {
start = j;
end = r;
}
while (start <= end) {
tmp[k++] = data[start++];
}
for (i = 0; i < tmp.length; i++) {
data[i + p] = tmp[i];
}
}
}
快速排序
public class QuickSort {
public static void main(String[] args) {
int[] data = new int[]{6, 5, 4, 3, 2, 1};
quickSort(data, 0, data.length - 1);
System.out.println();
}
public static void quickSort(int[] data, int p, int r) {
if (p >= r) {
return;
}
int q = partition(data, p, r);
quickSort(data, p, q - 1);
quickSort(data, q + 1, r);
}
private static int partition(int[] data, int p, int r) {
int i = p;
int pivot = data[r];
for (int j = p; j < r; j++) {
if (data[j] < pivot) {
if (i == j) {
i++;
} else {
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
}
int tmp = data[r];
data[r] = data[i];
data[i] = tmp;
return i;
}
}