希尔排序 -----C语言描述

    技术2022-07-10  130

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

    下面用个例子来说明一下: 确定一个增量序列{5,3,1}(可能有更好的增量)。当增量为5时,数组被划分为两组,并进行比较,得出第一次的结果。依次类推,最后一趟插入排序完以后就得出结果了。(最后一趟增量须为1)

    算法编写

    for (j = 0; add[j] > 0; j++) //依次增量排序 { a = add[j]; //-------------------------------------------------------插入排序 for (t = a; t < n; t ++) { temp = p[t]; for (k = t - a; k >= 0 && temp < p[k]; k -= a) { p[k + a] = p[k]; } p[k + a] = temp; } }

    可以看出来,希尔排序是将数组序列分成若干个子序列,然后再将子序列进行插入排序,等到序列基本有序时,最后进行一次全体插入排序。

    不稳定排序

    引用 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。—百度百科

    可以从上面的那个例子看出,有两个相同的数 48,但在最终排完序,之前在数组后面的48排在了前面,因此希尔排序是不稳定的。

    Processed: 0.010, SQL: 9