希爾排序

算法思想

      一、先取一個小於n的整數d1做爲第一個增量,把序列分紅d1個組。 java

      二、全部距離爲d1的倍數元素放在同一個組中,在各組內警醒直接插入排序。 web

      三、取第二個增量d2<d1重複尚需的分組和排序。 算法

      四、直至所取的增量dt=1(dt<dt-1<···· <d2<d1),即全部元素都放在同一組中進行插入排序爲止。 shell

實例演示

第一次,d1=5; 第二次,d2=3; 第三次 , d3=1;  數組

動畫中相同顏色爲一組,組內先執行插入排序。 app

代碼實現

package test.algorithm.FastSlowPointer;

public class ShellSort {
	
	/**
	 * 希爾排序
	 * @param list
	 */
	public static void shellSort(int[] list){
		int gap = list.length;
		int temp = 0;
		do{
			//增量
			gap = gap/3 + 1;
			for(int i = gap;i<list.length;i++){
				
				if(list[i]<list[i-gap]){
					temp = list[i];
					int j = i-gap;
					
					//比第i個大的元素所有向後移動gap位
					//空出的位置是j+gap
					while(j>=0 && list[j]>temp){
						list[j+gap] = list[j];
						j = j-gap;
					}
					
					//插入第i個元素
					list[j+gap] = temp;
				}
			}
			
		}while(gap>1);
	}
	
	public static void main(String[] args) {
		int[] list = {5,2,6,0,3,9,1,7,4,8};
		shellSort(list);
		
		System.out.print("打印數組:");
		for(int i :list){
			System.out.print(i+" ");
		}

	}

}
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息