排序原理
-
选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组
-
对选好的每一组数据完成插入排序
-
减小增长量,最小值为1,重复第二步操作
-
h=(array.length+1)/2
public class Shell { public static void sort(Integer[] a) { int h=1; while (h< a.length/2) { h=2*h+1; } while(h>0){ for (int i = h; i <a.length; i++) { for (int j =i; j>=h; j -= h) { if (greater(a[j-h],a[j])) { exch(a,j-h,j); } else break; } } h/=2; } } //判断两数大小 private static boolean greater(Comparable v,Comparable w) { return v.compareTo(w)>0; } //交换数组a,i处和j处的值 private static void exch(Integer[] b,int i,int j) { int temp; temp=b[i]; b[i]=b[j]; b[j]=temp; } }
public class test01 { public static void main(String[] args) { Integer[] shell={45,11,0,7,7,-6,78,1,46,-6}; Shell.sort(shell); System.out.println(Arrays.toString(shell)); } }