九大排序算法之希尔排序
- 算法思想
排序思想 - 代码实现
import java.util.*; //希尔排序(插入排序的快速排序算法):使数组中任意间隔为h的元素是有序的,h不断减小 //时间复杂度:NlogN,空间复杂度:1 public class Shell { public static void sort(Comparable[] a) { int N=a.length; int h=1; while(h<N/3)h=3*h+1; while(h>=1) { 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/=3; } } private static boolean less(Comparable v,Comparable w) { return v.compareTo(w)<0; } private static void exch(Comparable[] a,int i,int j) { Comparable t=a[i]; a[i]=a[j]; a[j]=t; } private static void show(Comparable[] a) { for(int i=0;i<a.length;i++) { System.out.print(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; } public static void main(String[] args) { String[] a= {"3","2","4","5","7"}; sort(a); assert isSorted(a); show(a); } }