希爾排序算法-Java版

1. 希爾排序

1.1 希爾排序的基本介紹

希爾排序是加強版的插入排序,相對與普通的插入排序做了優化,比普通的插入排序多了一個步長的概念

1.2 希爾排序思想

就是把數據下標按照一定的步長進行分組,然後每組分別用普通插入排序進行排序,知道步長減至爲 1 時,算法終止。

1.3 希爾排序的時間複雜度和空間複雜度等

算法名稱 平均時間複雜度 最好情況 最壞情況 空間複雜度 穩定性
希爾排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不穩定

2. 代碼演示

/**
 * @author shengjk1
 * @date 2020/4/9
 */
public class ShellSort {
	public static void main(String[] args) {
		int[] arr = {1, -2, 2, -3, 5, 0};
		
		for (int gap = arr.length / 2; gap > 0; gap /= 2) {
			
			for (int j = gap; j < arr.length; j += gap) {
				int insertIndex = j;
				int insertValue = arr[insertIndex];
				
				while (insertIndex - gap >= 0 && arr[insertIndex - gap] > insertValue) {
					arr[insertIndex] = arr[insertIndex - gap];
					insertIndex -= gap;
				}
				arr[insertIndex] = insertValue;
				System.out.printf("第%d次遍歷 insertIndex %d arr:%s", j, insertIndex, Arrays.toString(arr));
				System.out.println();
			}
		}
	}
}

代碼基本與普通插入排序一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章