希尔算法(记录)

来源:互联网 发布:vscode for mac 编辑:程序博客网 时间:2024/06/06 15:54

希尔排序基本思想

基本思想:

  先取一个小于n的整数d 1 作为第一个增量,把文件的全部记录分成d 1 个组。所有距离为d l 的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d 2 <d 1 重复上述的分组和排序,直至所取的增量d t =1(d t <d t-l <…<d2 <d 1 ),即所有记录放在同一组中进行直接插入排序为止。该方法实质上是一种分组插入方法。

    它和插入排序的区别在于先比较距离远的元素,而不是像简单交换排序算法那样先比较相邻的元素。这样可以快速减少大量无序的情况,从而减轻后续的工作。被比较的元素之间的距离逐步减少,直到1,这时排序变成了相邻元素的互换。


 1 public static void ShellSort(int[] list)
 2        {
 3            int h = 1;
 4            while (h <= list.Length / 9)
 5            {
 6                h = h * 3 + 1;
 7            }

 8            for (; h > 0; h = h / 3)
 9            {
10                for (int i = h + 1; i <=list.Length; i += h)
11                {
12                    int temp = list[i - 1];
13                    int j = i;
14                    while ((j > h) && (list[j - h - 1>temp))
15                    {
16                        list[j-1= list[j - h - 1];
17                        j -= h;
18                    }

19                    list[j - 1= temp;
20                }

21            }

22        }
原创粉丝点击