希尔排序分析 先将数组分为length/2组,然后依次/2分组 每组进行插入排序 最后再进行总的插入排序 代码1234567891011121314151617181920212223242526272829package 算法;public class 希尔排序 { public static void main(String[] args) { int[] arr = new int[]{8,9,1,7,2,3,5,4,6,0}; shellSort(arr); for (int i : arr) { System.out.println(i); } } private static void shellSort(int[] arr){ int len = arr.length; //循环进行分组,i表示分组数 for (int i = len/2; i >0 ; i/=2) { //开始插入排序 //因为分了组所以只遍历len-i次 for (int j = i; j < len; j++) { //从k位开始遍历比较 for (int k = j-i; k >=0 ; k-=i) { if(arr[k]>arr[k+i]){ int temp = arr[k]; arr[k] = arr[k+i]; arr[k+i] = temp; } } } } }} 优化: 123456789101112131415161718192021222324252627282930package 算法;public class 希尔排序 { public static void main(String[] args) { int[] arr = new int[]{8,9,1,7,2,3,5,4,6,0}; shellSort(arr); for (int i : arr) { System.out.println(i); } } private static void shellSort(int[] arr){ int len = arr.length; //循环进行分组,i表示分组数 for (int i = len/2; i >0 ; i/=2) { //开始插入排序 //因为分了组所以只遍历len-i次 for (int j = i; j < len; j++) { int index = j; int temp = arr[index]; for (int k = j-i; k >=0 ; k-=i) { if(temp<arr[k]){ arr[index]=arr[k]; index = k; } } arr[index] = temp; } } }}