希尔排序 排序原理: 1.选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组。 2.对分好组的每一组数据完成插入排序。 3.减小增长量,最小减为1,重复第二步骤。 代码实现: public class Shell { // 对数据a中的元素进行排序 public static void sort(Comparable[] a){ // 1.根据数组的长度来确定增长量的大小 int h=1; if (h<a.length/2){ h=h*2+1; } // 2.希尔排序 while (h>=1){ // 排序 // 2.1找到待插入的元素 for (int i=h;i<a.length;i++){ // 2.2插入元素到有序序列中 for (int j=i;j>=h;j-=h){ // 待插入元素就是a[j],比较a[j]和a[j-h] if (greater(a[j-h],a[j])){ exch(a,j-h,j); }else{ break; } } } // 减小h的值 h=h/2; } } // 比较元素v是否大于w元素 private static Boolean greater(Comparable v,Comparable w){ return v.compareTo(w)>0; } // 交换数组元素i和j的位置 private static void exch(Comparable[] a,int i,int j){ Comparable temp; temp=a[i]; a[i]=a[j]; a[j]=temp; } } //测试 public class ShellTest { public static void main(String[] args) { Integer[] a={9,1,2,5,7,4,8,6,3,5}; Shell.sort(a); System.out.println(Arrays.toString(a)); } }