希尔排序的详解

时间:2021-04-14来源:未知作者:admin点击:
可选中1个或多个下面的关键词,搜索相关资料。也可直接点搜索资料搜索整个问题。 希尔排序基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  希尔排序基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量dt=1(dtdt-l…d2d1),即所有记录放在同一组中进行直接插入排序为止。

  对于这样一个无序的数组10,想把它变成顺序递增的数组11。先隔3个元素取一次:把5284取了出来,往后搓一位,把96110取出来,再往后搓一位,又把3117取出来。分别对这三个小组排序成为递增的序列,再插回去,如图:

  于是得到了第一趟排序的结果:10.现在再以2为间隔重复以上步骤(这次得到的是两个小组)得到了10。最后再以1为间隔再搞一次(实际上这一步就是从左到右两两比较,调整位置),就得到了想要的结果。

  先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量dt=1(dtdt-l…d2d1),即所有记录放在同一组中进行直接插入排序为止。

  比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比[1]较就可能消除多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。

  希尔排序属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序。

  排序过程:先取一个正整数d1n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止。