希尔排序算法又称最小增量排序算法,其基本思想是:步骤1:构造一个步长序列delta1delta2...deltak,案例分析

希尔排序算法又称最小增量排序算法,其基本思想是:

步骤1:构造一个步长序列delta1、delta2...、deltak,其中delta1=n/2,后面的每个delta是前一个的1/2,deltak=1;

步骤2:根据步长序列、进行k趟排序;

步骤3:对第i趟排序,根据对应的步长delta,将等步长位置元素分组,对同一组内元素在原位置上进行直接插入排序。

【C代码】

下面是算法的C语言实现。

(1)常量和变量说明

data:待排序数组data,长度为n,待排序数据记录在data[0]、data[1]、...、data[n-1]中。

n:数组a中的元素个数。

delta:步长数组。

(2)C程序

#include

voidshellsort(intdata[],intn){

int*delta,k,i,t,dk,j;

k=n;

delta=(int*)nalloc(sizeof(int)*(n/2));

if(i=0)

do{

(1);

delta[i++]=k;

}while(2);

i=0;

while((dk=delta[i])>0){

for(k=delta[i];k

if((3)){

t=data[k];

for(j=k-dk;j>=0&&t

data[j+dk]=data[j];

}/*for*/

(4);//data[j+dk]=t;

}/*if*/

++i;

}/*while*/

}

【问题1】(8分)

根据说明和c代码,填充c代码中的空(1)~(4)。

【问题2】(4分)

【问题3】(3分)

对数组(15、9、7、8、20、-1、4)用希尔排序方法进行排序,经过di-趟排后得到的数组为(7)。

信管网参考答案:

(1)k=k/2

(2)k>1

(3)data[k](4)data[j+dk]=t

(5)小于

(6)否

(7)(4,9,-1,8,20,7,15)

温馨提示:因考试政策、内容不断变化与调整,信管网网站提供的以上信息仅供参考,如有异议,请以权威部门公布的内容为准!

信管网致力于为广大信管从业人员、爱好者、大学生提供专业、高质量的课程和服务,解决其考试证书、技能提升和就业的需求。

信管网软考课程由信管网依托10年专业软考教研倾力打造,官方教材参编作者和资深讲师坐镇,通过深研历年考试出题规律与考试大纲,深挖核心知识与高频考点,为学员考试保驾护航。面授、直播&录播,多种班型灵活学习,满足不同学员考证需求,降低课程学习难度,使学习效果事半功倍。

THE END
1.排序:希尔排序(算法)希尔算法的性能与所选取的增量(分组长度)序列有很大关系。只对特定的待排序记录序列,可以准确地估算比较次数和移动次数。想要弄清比较次数和记录移动次数与增量选择之间的关系,并给出完整的数学分析,至今仍然是数学难题。 希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏的情况下执行https://www.jianshu.com/p/d730ae586cf3
2.希尔密码加密算法及原理在古今中外的间谍战争中,敌人总是尽一切可能得到破解对方密码的钥匙,但要得到希尔密码的三把钥匙并不容易。 世界上没有无法突破的密码,希尔密码也不例外。希尔密码算法的缺点是线性变换的安全性非常脆弱,容易被攻击打破。黑客利用各种密码的弱点频繁攻击用户。尽管如此,希尔密码仍然是一个简单高效的密码。https://www.55tools.com/news/0376.html
3.排序算法图解之Java希尔排序java希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,其也是一种特殊的插入排序,即将简单的插入排序进行改进后的一个更加高效的版本,也称缩小增量排序。本文通过图片和示例讲解了希尔排序的实现,需要的可以了解一下 + 目录 1.希尔排序简介 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,其也是一种https://www.jb51.net/article/266793.htm
4.算法希尔排序算法的讲解和代码实践十大排序算法【算法】希尔排序算法的讲解和代码实践 思路 希尔排序,与其他排序不同的是,别的排序都能通过名字关联上,而希尔排序的名字,怎么看也不太像中文。 其实希尔排序就是插入排序的进化版,它会先声明一个间隙参数,然后按照间隙参数,把数组分成若干各子数组,对子数组进行插入排序。随着间隙越缩越小,整个数组的顺序也就慢慢https://download.csdn.net/blog/column/11823486/125115339
5.排序算法希尔排序详解!(源码+实现)腾讯云开发者社区希尔排序(Shell Sort)是一种排序算法,由美国计算机科学家Donald Shell于1959年提出。希尔排序是插入排序的一种改进版本,旨在减少插入排序的交换操作和比较次数,从而提高排序效率。这个算法的名字是以发明者的名字命名的,虽然它也被称为“递减增量排序”。 https://cloud.tencent.com/developer/article/2381976
6.排序算法之希尔归并堆和基数排序//希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本.但希尔排序是非稳定排序算法. 希尔排序是基于插入排序的以下两点性质而提出改进方法的 : 1. 插入排序在对几乎已经排好序的数据操作时,效率…https://zhuanlan.zhihu.com/p/88592144
7.希尔排序算法·PHP知识总结·看云希尔排序(Shell's Sort)是直接插入排序算法的一种更高效的改进版本,又称“缩小增量排序”(Diminishing Increment Sort)。 希尔排序是将要排序的数组按下标的一定增量进行分组,每组分别进行直接插入排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个数组都被分成一组,算法结束。 https://www.kancloud.cn/chenguanxu/test/2532630
8.美团架构师呕心之作:大厂面试核心知识点梳理5. 希尔排序算法 6. 归并排序算法 7.桶排序算法 8. 基数排序算法 9. 回溯算法 10. 最短路径算法 11. 最大子数组算法 12. 最长公共子序算法 13. 最小生成树算法 21. 数据结构 1栈(stack) 2 队列(queue) 3 链表(Link) 4 散列表(Hash Table) https://maimai.cn/article/detail?fid=1376287358&efid=W5_jYkpsH_eRLg3yD3tFwg
9.十大排序算法之冒泡排序快速排序的介绍首先,整个希尔排序就分为两个步骤:先进行预排序,然后进行插入排序。 我们知道,插入排序算法中如果序列本身已经很接近有序了,那么插入排序是一个不算的算法,那如果序列本身离着有序还很远,此时如果再用插入排序算法的话,效率就会非常低。所以这就引出了希尔排序(对插入排序进行优化)。 https://open.alipay.com/portal/forum/post/129601176
10.排序算法——希尔排序的图解代码实现以及时间复杂度分析希尔排序是冲破二次时间屏障的第一批算法之一。 希尔排序通过比较相距一定间隔的元素来工作;各躺比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。由于这个原因,希尔排序有时也叫做缩减增量排序。 希尔排序使用一个序列h1,h2,…,hi,这个序列叫做增量序列(increment sequence)。增量序列只要求h1https://www.cnblogs.com/zhangyiqinga/p/9777207.html
11.排序算法(八)希尔排序(缩小增量排序)51CTO博客次数会进一步减少。希尔排序就是基于这样一种思路来设计的排序算法。 2、希尔排序(Shell Sort,又称缩小增量法)是一种分组插入排序方法,因DL.Shell于1959年提出而得名,实质上是一 种分组插入方法。 3、排序思想 (1)先取一个正整数d1(d1<n)作为第一个增量,将全部n个记录分成d1组,把所有相隔d1的记录放在一https://blog.51cto.com/u_7174271/6725358