/**
* 排序工具类
*
* @author zlx
* @date 2021/07/14 14:08
**/
public class SortUtils {
// 插入排序
public static int[] insertSort(int[] data) {
int tmp, j;
for (int k = 0; k < data.length; k++) {
tmp = data[k];
j = k - 1;
while (j >= 0 && tmp < data[j]) {
data[j + 1] = data[j];
j--;
}
data[j + 1] = tmp;
}
return data;
}
// 选择排序
public static int[] selectSort(int[] data) {
int i, j, k, tmp = 0;
for (i = 0; i < data.length - 1; i++) {
k = i;
for (j = i + 1; j < data.length; j++) {
if (data[j] < data[k]) {
k = j;
}
}
if (k != i) {
tmp = data[i];
data[i] = data[k];
data[k] = tmp;
}
}
return data;
}
// 冒泡排序
public static int[] bubbleSort(int[] data) {
int i, j, tmp;
for (i = 0; i < data.length - 1; i++) {
for (j = data.length - 1; j > i; j--) {
if (data[j] < data[j - 1]) {
tmp = data[j];
data[j] = data[j - 1];
data[j - 1] = tmp;
}
}
}
return data;
}
//快速排序
public static int[] quickSort(int[] data, int low, int high) {
int i, j, temp, t;
if (low > high) {
return data;
}
i = low;
j = high;
//temp就是基准位
temp = data[low];
while (i < j) {
//先看右边,依次往左递减
while (temp <= data[j] && i < j) {
j--;
}
//再看左边,依次往右递增
while (temp >= data[i] && i < j) {
i++;
}
//如果满足条件则交换
if (i < j) {
t = data[j];
data[j] = data[i];
data[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
data[low] = data[i];
data[i] = temp;
//递归调用左半数组
quickSort(data, low, j - 1);
//递归调用右半数组
quickSort(data, j + 1, high);
return data;
}
//希尔排序
public static int[] shellSort(int[] data) {
for (int gap = data.length / 2; gap > 0; gap /= 2) { /*步长逐渐减小*/
for (int i = gap; i < data.length; i++) { /*在同一步长内*/
//同一步长内排序方式是插入排序
int temp = data[i], j; //待排元素
//j-gap代表有序数组中最大数的下标,j-pag表示有序数组的前一个元素,减pag是减去偏移量就是步长
for (j = i; j >= gap && temp < data[j - gap]; j -= gap) {
data[j] = data[j - gap]; //原有序数组最大的后移一位
}
data[j] = temp; //找到了合适的位置插入
}
}
return data;
}
}
8.排序工具类
最新推荐文章于 2022-08-08 14:41:35 发布