如上圖所示,第一步分紅3個隊列,隊列長度的一半(len/2)爲間隔調用插入排序java
第二部間隔/2 ,插入排序shell
直到間隔爲1,排序完成。code
public static void main(String[] args) { int[] a = {1, 5, 88, 4, 5, 0, 84, 69, 12, 5, 10, 254}; System.out.println(Arrays.toString(a)); shellSort(a); System.out.println(Arrays.toString(a)); } /** * 希爾排序 */ public static void shellSort(int[] a){ if(a!=null){ int len = a.length,interval=len/2;//首次間隔爲長度的1/2 while(interval>0){ for(int i = interval;i<len;i++){ if(a[i]<a[i-interval]){ int temp = a[i]; int j = i-interval; for(;j>=0&&(temp<a[j]);j-=interval){ a[j+interval] = a[j]; } a[j+interval] = temp; } } interval = interval / 2; } } }