您的位置:首页 > 文旅 > 美景 > 长春建站价格_安卓可视化开发工具软件_站长工具域名查询社区_seo教程网站优化

长春建站价格_安卓可视化开发工具软件_站长工具域名查询社区_seo教程网站优化

2025/4/2 11:42:26 来源:https://blog.csdn.net/2301_80508598/article/details/146555711  浏览:    关键词:长春建站价格_安卓可视化开发工具软件_站长工具域名查询社区_seo教程网站优化
长春建站价格_安卓可视化开发工具软件_站长工具域名查询社区_seo教程网站优化

简介:

希尔排序法⼜称缩⼩增量法。是一种基于插入排序的高效排序算法,由美国计算机科学家Donald Shell于1959年提出。

基本思想:

先选定⼀个整数(通常是gap=n/3+1),把 待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排 序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进⾏插⼊排序当gap=1时,就相当于 直接插⼊排序

比较:(直接插入排序)

它是在直接插⼊排序算法的基础上进⾏改进⽽来的,综合来说它的效率肯定是要⾼于直接插⼊排序算 法的。

思路:(如图)

 算法实现:

思路一:

//代码一:void ShellSort(int* a, int n) {int gap = n;while (gap > 1) {gap = gap / 3 + 1;for (int i = 0; i < n - gap; ++i) {int end = i;int tmp = a[end + gap];while (end >= 0) {if (a[end] > tmp) {a[end + gap] = a[end];end -= gap;}else {break;}}a[end + gap] = tmp;}}
}

 思路二:

class Solution {
public:int ShellSort(vector<int>& num) {int n = num.size();int gap = n;while (gap > 1) {gap = gap / 3 + 1;for (int i = 0; i < n - gap; ++i) {int end = i, tmp = num[end + gap];while (end >= 0) {if (num[end] > tmp) {num[end + gap] = num[end];end -= gap;}else {break;}}num[end + gap] = tmp;}}}
};

 

总结:

特点:

希尔排序是对直接插⼊排序的优化。

当 gap > 1 时都是预排序,⽬的是让数组更接近于有序。

复杂度:

希尔排序时间复杂度不好计算,因为 gap 的取值很多,导致很难去计算,因此很多书中给出的希尔排序的时间复杂度都不固定。

这部分要证明的话太难了,大家如果感兴趣的话可以去了解一下严蔚敏《数据结构(C语⾔版)》一书中给出的时间复杂度详解。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com