算法--希尔排序

xiaoxiao2021-02-28  98

1、基本概念

希尔排序是基于直插排序,也称为缩小增量排序。 把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

2、实现

public static void main(String[] args) { int[] src = { 3,2,1,4,5,6,7,16,15,14,13,12,11,10,8,9 }; shellSort(src); print(src); } public static void shellSort(int[] list) { int gap = list.length / 2; while (1 <= gap) { for (int i = gap; i < list.length; i++) { int j = 0; int temp = list[i]; // 对距离为 gap 的元素组进行直插排序 for (j = i - gap; j>=0 && temp<list[j]; j = j - gap) list[j + gap] = list[j]; list[j + gap] = temp; } gap = gap / 2; // 减小增量 } } public static void print(int src[]){ for (int i = 0; i < src.length; i++) { System.out.print(src[i] + " "); } System.out.println(); }

3、复杂度

希尔排序是当时第一个复杂度突破O( n2 )的。希尔排序的关键是增量的选择。 平均时间 O(nlogn) 最坏情况 O( ns ) (1 < <script type="math/tex" id="MathJax-Element-113"><</script>s < <script type="math/tex" id="MathJax-Element-114"><</script>2)

参考 有图:http://www.cnblogs.com/chengxiao/p/6104371.html

转载请注明原文地址: https://www.6miu.com/read-25580.html

最新回复(0)