快速排序:
public static void quickSort(int[] array, int left, int right) {
int l = left;
int r = right;
int pivot = array[(left + right) / 2];
while (l < r) {
while (array[l] < pivot) {
l++;
}
while (array[r] > pivot) {
r--;
}
if (l >= r) {
break;
}
array[l] = array[l] + array[r] - (array[r] = array[l]);
if (array[l] == pivot) {
r--;
}
if (array[r] == pivot) {
l++;
}
}
if (l == r) {
l++;
r--;
}
if (left < r) {
quickSort(array, left, r);
}
if (right > l) {
quickSort(array, l, right);
}
}
希尔排序:
private static void shellSort(int[] arr, int numberLength) {
//分组
for (int gap = numberLength / 2; gap > 0; gap /= 2) {
//遍历
for (int i = gap; i < numberLength; i++) {
int valIndex = i;
int val = arr[valIndex];
//插入的值小于组内另一个值
if (val < arr[valIndex - gap]) {
//开始插排
while (valIndex - gap >= 0 && val < arr[valIndex - gap]) {
// 插入
arr[valIndex] = arr[valIndex - gap];
// 游标前移
valIndex -= gap;
}
}
arr[valIndex] = val;
}
}
}