/** * @desc: 希尔排序 * @author: 毛会懂 * @create: 2020-12-23 14:21:00 **/ public class Shell { public static void sort(Comparable[] arr){ int n = arr.length; int h = 1; //根据数组a的长度,确定增长量h的初始值 while (h < (n >>>1)){ //n >>>1 等价于 n / 2 h = h << 1 + 1; // h = h * 2 + 1 } while (h >=1){//控制 增量变化 重新排序的次数 //插入排序(第一组的第二个元素,对应第h个元素,第二组的第二个元素,对应第h+1个元素) for(int i = h;i < n;i++){ //插入排序 for(int j = i;j >= h;j-=h){ if(isExchange(arr[j-h],arr[j])){ exchange(arr,j-h,j); }else{ break; } } } h = h >>> 1; // h = h / 2 } } private static Boolean isExchange(Comparable o1,Comparable o2){ return o1.compareTo(o2) > 0; } private static void exchange(Comparable[] arr,int i,int j){ Comparable temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } //希尔排序 public static void main(String[] args) { Integer[] arr = {10,8,20,30,5,7,4,12,40,30,1,2,4,3,100,5,32,45,23,66,45,7,55,79,6}; Shell.sort(arr); Arrays.asList(arr).forEach(System.out::println); Person[] persions = {new Person("b",11),new Person("a",10),new Person("c",12),new Person("b",111), new Person("a",5),new Person("c",4)}; Insertion.sort(persions); for (Person person : persions) { System.out.println(person); } }
本文参考链接:https://www.cnblogs.com/maohuidong/p/14179477.html