希尔排序( Shell sort) 希尔排序方法又称为“缩小增量”排序。 该方法的基本思想是:先将整个待排对象序列 按照一定间隔分割成为若干子序列,分别进行 直接插入排序,然后缩小间隔,对整个对象序 列重复以上的划分子序列和分别排序工作,直 到最后间隔为1,此时整个对象序列已“基本 有序”,进行最后一次直接插入排序
希尔排序 (Shell Sort) 希尔排序方法又称为“缩小增量”排序。 该方法的基本思想是:先将整个待排对象序列 按照一定间隔分割成为若干子序列,分别进行 直接插入排序,然后缩小间隔,对整个对象序 列重复以上的划分子序列和分别排序工作,直 到最后间隔为1,此时整个对象序列已 “基本 有序”,进行最后一次直接插入排序
49 2516 08 2 = gap- 3目B 25 16103 49
21 25 49 25* 16 08 0 1 2 3 4 5 21 25* i = 1 08 49 gap = 3 25 16 49 25 16 08 49 25* 08 21 21 25 25* 16
2116 2525 49 08 2 5 i=2 8ap=2 自面目 25 16 {25 49
21 25 49 16 25* 08 0 1 2 3 4 5 21 i = 2 08 49 gap = 2 25 16 49 16 25* 08 21 25 49 25* 08 16 21 25* 25
2525 49 08 16 2 5 i=3 gap=I 49 0816 25 开始时φq(隔值)的值较大,子序列中的 对象较少,排序速度较快;随着排序进展 gp值逐渐变小,子序列中对象个数逐渐变多 由于前面工作的基础,大多数对象已基本有序, 所以排序速度仍然很快
21 25 49 16 25* 08 0 1 2 3 4 5 21 i = 3 08 gap = 1 16 25 49 25* 开始时 gap(间隔值) 的值较大,子序列中的 对象较少,排序速度较快;随着排序进展, gap 值逐渐变小,子序列中对象个数逐渐变多, 由于前面工作的基础,大多数对象已基本有序, 所以排序速度仍然很快
希尔排序的算法 void Shell Sort(sqlist &l, int detal,int t) for(int k=0; k<t; ++k)t Shelllnsert(l, dltakd 说明:dlta3={5,3,1}
希尔排序的算法 void ShellSort(SqList &L, int dlta[],int t){ for (int k=0;k<t;++k){ ShellInsert(L,dlta[k]); } } 说明:dlta[3]={5,3,1}