另外,由于开始时增量的取值较大,每组中记录较少, 故排序比较快,随着增量值的逐步变小,每组中的记录逐渐 变多,但由于此时记录已基本有序了,因次在进行最后一趟 增量为1的插入排序时,只需作少量的比较和移动便可完成 排序,从而提高了排序速度。
排序
希尔插入排序——性能效率
希尔排序比直接插入排序的平均性能要好: 在最好情况(原始记录按关键字有序排列)下, 移动次数为0,比较次数界于n~ n2 之间。 在最坏情况(原始记录按关键字逆序排列)下, 移动次数和比较次数接近n2。 在平均情况下,移动次数和比较次数在O(n1.3) 左右,好于直接插入排序。
线性插入排序示例
排序
对于有n个数 据元素的待排 序列,插入操 作要进行n-1
次
该算法适合于n 较 小的情况,时间复 杂度为O(n2).
排序
插入算法
方法:Ki与Ki-1,K i-2,…K1依次比较,直到找到应插入的 位置。
void insertSort(RedType L[ ],int n)
{ int i ,j;
组),即所有数据放在一组中排序为止。此时,全部数 据便按次序排好了。
希尔插入排序——过程
设待排序共有10个记录,其关键字分别为47, 33, 61, 82, 71, 11, 25, 47, 57, 02,增量序列取值依次为5, 3, 1。
排序
希尔插入排序——特点
希尔排序实质上还是一种插入排序,其主要特点是: 每一趟以不同的增量进行排序。在每趟的插入排序中,记录 的关键字是和同一组中的前一个关键字进行比较,所以关键 字较小的记录在排序过程中是作跳跃式的移动。
L.r[i]
有序序列L.r[1..i] 无序序列 L.r[i+1..n]