花茵美凝胶效果怎么样:9.6.2 希尔排序算法(1)
来源:百度文库 编辑:中财网 时间:2024/05/05 17:49:03
9.6.2 希尔排序算法(1)
好了,为了能够真正弄明白希尔排序的算法,我们还是老办法——模拟计算机在执行算法时的步骤,还研究算法到底是如何进行排序的。
希尔排序算法代码如下。
- /* 对顺序表L作希尔排序 */
- 1 void ShellSort(SqList *L)
- 2 {
- 3 int i,j;
- 4 int increment=L->length;
- 5 do
- 6 {
- 7 incrementincrement=increment/3+1; /* 增量序列 */
- 8 for(i=increment+1;i<=L->length;i++)
- 9 {
- 10 if (L->r[i]
r[i-increment]) - 11 {/* 需将L->r[i]插入有序增量子表 */
- 12 L->r[0]=L->r[i]; /* 暂存在L->r[0] */
- 13 for(j=i-increment;j>0&&L->r[0]
r[j];j-=increment) - 14 L->r[j+increment]=L->r[j];/*记录后移,查找插入位置 */
- 15 L->r[j+increment]=L->r[0]; /* 插入 */
- 16 }
- 17 }
- 18 }
- 19 while(increment>1);
- 20 }
1.程序开始运行,此时我们传入的SqList参数的值为length=9,r[10]= {0,9,1,5,8,3,7,4,6,2}。这就是我们需要等待排序的序列,如图9‐6‐4所示。
2.第4行,变量increment就是那个“增量”,我们初始值让它等于待排序的记录数。
3.第5~19行是一个do循环,它提终止条件是increment不大于1时,其实也就是增量为1时就停止循环了。
4.第7行,这一句很关键,但也是难以理解的地方,我们后面还要谈到它,先放一放。这里执行完成后,incremen+1=4。
5.第8~17行是一个for循环,i从4+1=5开始到9结束。
6.第10行,判断L.r[i]与L.r[i‐increment]大小,L.r[5]=3小于L.r[i‐increment]=L.r[1]=9,满足条件,第12行,将L.r[5]=3暂存入L.r[0]。第13~14行的循环只是为了将L.r[1]=9的值赋给L.r[5],由于循环的增量是j‐=increment,其实它就循环了一次,此时j=‐3。第15行,再将L.r[0]=3赋值给L.r[j+increment]=L.r[‐3+4]=L.r[1]=3。如图9‐6‐5所示,事实上,这一段代码就干了一件事,就是将第5位的3和第1位的9交换了位置。
(点击查看大图)图9-6-68.循环继续,i=7,L.r[7]=4
用pascal语言实现希尔排序算法
希尔排序的算法,哪位能不能提供一下?
排序。随机生成若干个数据,程序将数据排序后输出,分别使用快速排序,希尔排序,冒泡排序算法进行排序。
什么是希尔排序法
谁知道什么叫“谢尔排序”(也叫“希尔排序”)
求希尔排序法的C++代码
结构体排序算法
asp排序算法
什么是起泡排序算法??
急求一排序算法
合并排序算法
vb选择排序算法
内部排序算法比较
内部排序算法比较
快速排序法与希尔排序法的具体步骤
希尔排序法属于哪一种类型的排序法
谁知道空间复杂度为o(1)的归并排序算法?
C算法.第1卷,基础、数据结构、排序和搜索
C算法.第1卷,基础、数据结构、排序和搜索
整数排序算法的问题?
堆排序的具体算法
快速排序的循环算法
求几种排序法的算法
全排序的算法(PASCAL)