//冒泡排序
public static void bubbleSort(int[] data) {
int n = data.length;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (data[i] < data[j]) {
Utils.swap(data, i, j);
}
}
}
}
//选择排序(选择一个最小的)
public static void selectSort(int[] data) {
int n = data.length;
for (int i = 0; i < n; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (data[j] < data[min]) {
min = j;
}
}
Utils.swap(data, i, min);
}
}
//插入排序
public static void insertSort(int[] data) {
int n = data.length;
for (int i = 1; i < n; i++) {
for (int j = i; j > 0; j--) {
if (data[j] < data[j - 1]) {
Utils.swap(data, j, j - 1);
}
}
}
}
//插入排序的改进
public static void insertSort2(int[] data) {
int n = data.length;
for (int i = 1; i < n; i++) {
int j = i;
int e = data[j];
for (; j > 0; j--) {
if (e < data[j - 1]) {
data[j] = data[j - 1];
} else {
break;
}
}
data[j] = e;
}
}
//快速排序
public static void quickSort(int[] data, int l, int r) {
if (l < r) {
int k = partition(data, l, r);
quickSort(data, l, k - 1);
quickSort(data, k + 1, r);
}
}
private static int partition(int[] data, int l, int r) {
int e = data[l];
while (l < r) {
//从后往前找比e小的数
while (l < r && data[r] >= e)
r--;
Utils.swap(data, r, l);
//从前往后找比e大的数
while (l < r && data[l] <= e)
l++;
Utils.swap(data, r, l);
}
return l;
}