JAVA常用排序算法之希尔排序
希尔排序是直接插入排序的一种改进,这是一种不稳定的算法。
具体的实现方式如下:设定增量,让两个数字进行比较,然后调换位置。举个例子,32,15,78,24,22,78,11先设置增量为3,那么就是将32和24进行比较,32更大,调换位置。然后依次向后比较,将整个数组变成基本有序(就是大的数字基本在后面,小的数字基本在前面)。注意,最后一个增量一定要设置为1。
算法的平均时间复杂度为O(n×log(n))
实现的代码如下:
public class HillSort {
public static void main(String[] args) {
//需要排序的数组
int[] arr = {55, 234, 19, 236, 11, 563, 111};
//设置增量的数组
int[] increase = {3, 1};
hillSort(increase, arr);
print(arr);
}
//打印的方法
private static void print(int[] arr) {
for (int i : arr
) {
System.out.println(i);
}
}
//希尔排序的方法
private static void hillSort(int[] increase, int[] arr) {
int temp;
for (int i = 0; i < increase.length; i++) {
for (int j = 0; j < arr.length; j++) {
//根据增量进行比较
if (j + increase[i] < arr.length) {
if (copare(arr[j], arr[j + increase[i]])) {
temp = arr[j];
arr[j] = arr[j + increase[i]];
arr[j + increase[i]] = temp;
}
}
}
}
}
//两个数字比较大小
private static boolean copare(int a, int b) {
return a > b ? true : false;
}
}