长春网站快照优化公司vpswindows野外大全
news/
2025/9/26 6:56:44/
文章来源:
长春网站快照优化公司,vpswindows野外大全,怎么做网站制作,shopify做国内网站介绍 希尔排序属于那种没有了解过的直接看代码一脸懵逼的#xff0c; 所以同学们尽量不要直接看代码#xff0c;仔细阅读本篇博客内容。 插入排序本来算是一个低效排序#xff0c;
一次只可以挪动一个数据#xff0c;
但是#xff0c;它的强来了#xff01;#xff01…介绍 希尔排序属于那种没有了解过的直接看代码一脸懵逼的 所以同学们尽量不要直接看代码仔细阅读本篇博客内容。 插入排序本来算是一个低效排序
一次只可以挪动一个数据
但是它的强来了
---Donald Shell(希尔) 对插入排序进行了优化 将插入排序提升了不止一个档次 甚至可以和快速排序平起平坐! 基本思想 先选定一个整数把待排序文件中所有记录分成个 组所有距离为的记录分在同一组内并对每一组内的记录进行排序。 然后取重复上述分组和排序的工 作。当到达1时所有记录在统一组内排好序。 希尔排序法又叫做缩小增量法。 其本质就是对固定间隔组成的序列进行插入排序
然后此固定间距步步缩小最后进行直接插入排序
先进行预排序再进行直接插入排序 根据上图明显看出进行预排序过后的数列已经有了基本的顺序 大大缩小了大数字在前小数字在后还需要一个一个挪动的尴尬局面 代码实现 void ShellSort(int* a, int n) { // 1、gap 1 预排序 // 2、gap 1 直接插入排序 int gap n; while (gap 1) { gap gap / 3 1; // 1可以保证最后一次一定是1 // gap gap / 2; 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; } } } 这是多组同时进行间隔gap排序
gap的取值 gap的取值方法有很多种. 但是每一种gap的取值都满足:先大后小原则 也就是我们的预排序不止排序一次 gap会由大变小,常见的取值有: gapn/2 (n为数组长度)gapn/3 (n为数组长度) 同时取值时一定要确保最后一个值为1收尾 不过对于gap到底取什么值最合适到现在也没有定论因为快排的横空出世再怎么研究希尔也比不过快排也就没了意义
特性总结 1. 希尔排序是对直接插入排序的优化。 2. 当gap 1时都是预排序目的是让数组更接近于有序。 当gap 1时数组已经接近有序的了这样就会很快。这样整体而言 可以达到优化的效果。我们实现后可以进行性能测试的对比。 3. 希尔排序的时间复杂度不好计算因为gap的取值方法很多 导致很难去计算因此在好些树中给出的 希尔排序的时间复杂度都不固定 《数据结构(C语言版)》--- 严蔚敏 《数据结构-用面相对象方法与C描述》--- 殷人昆 4. 稳定性不稳定
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917928.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!