
一、快速排序
public static int[] quickSort2(int[] a) {
qSort(a, 0, a.length - 1);
return a;
}
public static void qSort(int[] sequence, int low, int high) {
int pivot = sequence[low];
int left = low, right = high;
if (low >= high) {
return;
}
swap(sequence, low, high);
while (true) {
while (low < high && sequence[low] <= pivot) {
low++;
}
while (low < high && sequence[high] >= pivot) {
high--;
}
if (low < high) {
swap(sequence, low, high);
} else {
break;
}
}
swap(sequence, low, right);
qSort(sequence, left, low - 1);
qSort(sequence, low + 1, right);
}
二、归并排序
public static int[] mergingSort(int[] a) {
if (a.length > 0) {
mergingSortRecursion(a, 0, a.length - 1);
}
return a;
}
public static void mergingSortRecursion(int[] data, int left, int right) {
if (left < right) {
int middle = (left + right) / 2;
mergingSortRecursion(data, left, middle);
mergingSortRecursion(data, middle + 1, right);
merge(data, left, middle, right);
}
}
public static void merge(int[] data, int left, int middle, int right) {
int[] tempArray = new int[data.length];
int i = left;
int j = middle + 1;
int k = left;
while (i <= middle && j <= right) {
if (data[i] <= data[j]) {
tempArray[k++] = data[i++];
} else {
tempArray[k++] = data[j++];
}
}
while (j <= right) {
tempArray[k++] = data[j++];
}
while (i <= middle) {
tempArray[k++] = data[i++];
}
while (left <= right) {
data[left] = tempArray[left++];
}
}