基本思路:
希尔排序实际上是,定义一组增量在增量内进行插入排序,并逐步缩小这个增量,(因此它又称缩小增量排序)
时间复杂度:
O(n^(1.3-2))
尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择
空间复杂度:
常数阶 O(1)
图解:
假设存在一个长度为8的无序数组 ,
第一步
在第一次定义增量时,增量为四组,在每一组内部使用插入排序来交换位置
第二步
第二次缩小增量,增量缩减为2组,在每组内部使用插入排序
di
第三步
继续缩小增量,此时增量为1,进行插入排序后得到排序结果
代码示例:
package paixu; import java.util.Arrays; public class xier { public static void main(String[] args) { int arr[] = new int[]{5,6,8,4,1,2,0}; paixu(arr); } public static void paixu(int[] arr){ for(int grap = arr.length;grap > 0;grap /=2){ for(int i = grap;i < arr.length;i++){ for(int j = i - grap;j >= 0;j-=grap){ if(arr[j] > arr[j+grap]){ int temp = arr[j]; arr[j] = arr[j + grap]; arr[j + grap] = temp; }else{ break; } } } } System.out.println(Arrays.toString(arr)); } }