C语言--------排序算法---------希尔排序(二)

       希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序

基本思想:

先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
该方法实质上是一种分组插入方法。
比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除  多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。
 初始:d=5   
          49   38   65   97   76   13   27   49   55   04   
          |----------------------------|   
                  38|--------------------- |27   
                        65                               49      
                        |-----------------------------|   
                            97                                 55   
                              |-----------------------------|   
                                    |76------------------------04|   
  一趟结果   
    
  d=3   13   27   49  55   04   49   38   65     97     76       

  二趟结果   
          13   04   49  38   27   49   66   65   97   76   
  d=1   
  三趟结果   
          04   13   27   38   49  49   55   65   76   97
C语言--------排序算法---------希尔排序(二)_第1张图片

C语言--------排序算法---------希尔排序(二)_第2张图片

你可能感兴趣的:(C语言,排序算法)