// 2.交换排序:快速排序
private static int[] quickSort(int[] data, int low, int high) {
if (low < high) {
int middle = getMiddle(data, low, high);// 获取中间值
// 对两端的再次进行排序
quickSort(data, low, middle - 1);
quickSort(data, middle + 1, high);
}
return data;
}
// 快速排序:获取中间值
private static int getMiddle(int[] data, int low, int high) {
// 以第一个元素为基准
int temp = data[low];
while (low < high) {
while (low < high && data[high] > temp) {
high--;
}
data[low] = data[high];
while (low < high && data[low] < temp) {
low++;
}
data[high] = data[low];
}
data[low] = temp;
return low;
}
// 2.交换排序:冒泡排序
private static int[] bubbleSort(int[] data) {
// 冒泡次数
for (int i = 0; i < data.length; i++) {
// 冒泡
for (int j = 0; j < data.length - i - 1; j++) {
if (data[j] > data[j + 1]) {
int temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
}
return data;
}
// 1.插入排序:希尔排序
private static int[] shellSort(int[] data) {
// 划分组
for (int r = data.length / 2; r >= 1; r /= 2) {
// 对每一组进行插入排序
for (int i = r; i < data.length; i++) {
int insertData = data[i];// 插入的数据
int j = i - r;// 临时序号
while (j >= 0 && data[j] < insertData) {
data[j + r] = data[j];
j -= r;
}
data[j + r] = insertData;
}
}
return data;
}
// 1.插入排序:直接插入排序
private static int[] insertSort(int[] data) {
for (int i = 1; i < data.length; i++) {
int insertData = data[i]; // 要插入到数组中的数据
int j = i - 1; // 临时脚标
while (j >= 0 && insertData < data[j]) {
data[j + 1] = data[j];// 将原始数据后移
j--;
}
data[j + 1] = insertData; // 将如要插入的数据插入到此处
}
return data;
}