一、文字解释希尔排序
希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
以数组大小为10举例,该数组增量分别是5,2,1。
希尔排序是将待排序的数组元素 按下标的一定增量分组 ,分成多个子序列,然后对各个子序列进行直接插入排序算法排序;然后依次缩减增量再进行排序,直到增量为1时,进行最后一次直接插入排序,排序结束。
二、希尔排序动态图
三、代码
public static void main(String[] args) {
int[] arr = {12, 512, 51, 5, 13, 6, 7, 24, 63, 3, 15};
int gap = arr.length / 2;
while (gap != 0) {
for (int i = gap; i < arr.length; i++) {
int t = arr[i];
int j;
for (j = i - gap; j >= 0 && arr[j] > t; j -= gap) {
arr[j + gap] = arr[j];
}
arr[j + gap] = t;
}
gap /= 2;
}
System.out.println(Arrays.toString(arr));
}
输出结果:
[3, 5, 6, 7, 12, 13, 15, 24, 51, 63, 512]
四、时间复杂度
最好情况下时间复杂度:O(n)
最差情况下时间复杂度:O((nlog(n))^2)
平均情况下时间复杂度:O((nlog(n))^2)