/**算法思想:基于插入排序的思想,在相隔每个增量元素都是有序的。又称缩小增量插入排序,先按 一定的间隔(增量)将待排序序列分组,每组内进行直接插入排序,然后缩小间隔,再次在各分组内部 进行直接插入排序,后面逐步缩小间隔,最后一直将间隔缩小到1,进行一次直接插入排序即完成。 算法的时间效率:有很大的不确定性,但是随着数组规模的增大,算法的效率越好(增量选择) 学习建议:模拟算法的轨迹 * */ public class Shell { public static void sort(Comparable []a){ int N=a.length; int h=1; while (h<N/2) h=2*h+1; while(h>=1){//将数组变为h有序 for(int i=h;i<N;i++) for(int j=i;j>=h&&less(a[j],a[j-h]);j-=h) exch(a,j,j-h); h=h/2; } } private static boolean less(Comparable v,Comparable w){//判断是否逆序 return v.compareTo(w)<0; } private static void exch(Comparable []a,int i,int j){ Comparable temp=a[i]; a[i]=a[j]; a[j]=temp; } public static void show(Comparable []a){ for(int i=0;i<a.length;i++) System.out.printf("%3d",a[i]); System.out.println(); } public static boolean isSorted(Comparable []a){ for (int i=1;i<a.length;i++) if(less(a[i],a[i-1])) return false; return true; } } //个人模拟了一遍,优快云上传不了这张图片,建议最好自己模拟一下,加深理解
希尔排序
最新推荐文章于 2025-01-21 00:21:24 发布