首页 技术 正文
技术 2022年11月14日
0 收藏 882 点赞 4,578 浏览 867 个字

希尔排序是一种插入排序,是对直接插入排序的一种改进,该算法出自于D.L.Shell,因此得名为希尔。Shell排序又名缩小增量排序。

思想

     假设初始序列为n个元素,先取一个小于n的整数d1作为第一个增量,然后将全部元素分为d1组。所有距离为d1的倍数的记录放在同一个组中,先在各个组内进行直接插入排序,然后取第二个增量d2 < d1(d2=d1/2)重复上述的分组和排序动作,直到所取的增量di=1,即所有记录放在同一组中进行直接插入排序为止。      注意:一般去d1=n/2,di+1=di/2。如果结果为偶数,则加1,保证di为奇数。

例子

    初始序列为[ 6 3 4 1 5 8]    第一步:          d1=6/2=3,将第一个和第四个比较,进行交换,如图所示。              第二步:         d2=d1/2=1.5,由于取奇数,所以d2=1;                  此时待排序列仍是无序的。     第三步:         当执行到d=1时,仍然是无序的,此时进行直接插入排序,直接插入排序不再详细叙述,请看上一篇博客: 这样希尔排序才是真正的完成。代码

void shellsort(int number[]) {
int i, j, k, d, t; d = Len / 2; while(d > 0) {
for(k = 0; k < d; k++) {
for(i = k+d; i < Len; i+=gap) {
for(j = i - d; j >= k; j-=d) {
if(number[j] > number[j+d]) {
t = number[j];
number[j]=number[j+d];
number[j+d]=t;
}
else
break;
}
}
}
}

分析     由上面的例子可以看出,希尔排序的执行时间依赖于增量序列d的选择,由于增量不确定,所以希尔排序是不稳定的排序。其平均时间复杂度是  O(n1.3),最坏情况时间复杂度为 O(n2);空间复杂度为O(1)。总结:     经过上述分析之后发现shell排序算法的中心在与找到增量,根据增量来找到两两需要比较和交换的值,最后再进行一次直接插入运算,这样就算是大功告成了。       

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,497
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,910
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,744
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,497
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,135
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,298