希尔排序算法-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();
			}
		}
	}
}

代码基本与普通插入排序一致。

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