欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 希尔排序实验心得体会

希尔排序实验心得体会

时间:2019-03-26 14:13

希尔排序法,最坏情况需要几次比较

呵呵,昨天看数据结构刚看到,希尔排序时间复杂度为O(n(log2n)^2),空间复杂度为0(1),是一种不稳定的排序算法,直接选择排序的时间复杂度为0(n^2),空间复杂度为0(1),所以希尔排序的效率高。

希尔排序和堆排序的实际效率谁高

个人认为是快速排序。

快速排序的最差复杂度可能会降为n^2,最快则是nlogn,但是,平均情况下是较快的。

而希尔排序的最差情况下,复杂度可能会降为n^s 到n^s之间,(1<=s<=2),平均则是nlog^2n。

理论上来看,希尔排序可能是效率比较高的。

但是,实际情况来看,快速排序的实际效果很不错。

原因就是,快速排序在实际情况中,坏的情况是不太容易出现的(取中间值或随机值),坏情况概率低。

而,希尔排序在实际情况中,效率就取决于他在求解过程中的增量,合理的增量是不好找的。

因此,经常会出现不爽的情况,坏的情况概率高。

论文:

用c语言编写一个希尔排序程序,新手,最好能给注释下

谢谢

网友wang1992092对希尔排序的理解有些错误,希尔排序对每个子序列进行的是直接插入排序,而不是如他所给出的选择排序。

你可以先百度一下希尔排序的定义。

我这里给一个C源代码,你可以试试。

直接插入排序的思路是:将待排表分成两部分,一部分是已有序部分L,另一部分是待排序部分R。

L初始化为只含第一个元素的表,因L现在只含一个元素,所以是有序的。

然后每次从R中取出最前面的元素到tmp(相当于出队到tmp中),然后在L中从后向前搜索插入位置,边搜索边向后移动比tmp大的元素,找到了插入位置后就将tmp插入到L中。

直到R部分为空时结束。

typedef int datatype;void InsertSort(datatype a[], int left, int right, int gap) \\\/*对数组a中起始下标为left,结束下标为right,步长为gap的子序列进行直接插入排序,当gap等于1时就是通常的插入排序了*\\\/{ int tmp, i, j; for(i = left + gap; i <= right; i += gap){ for(tmp = a[i], j = i - gap; j >= left && a[j] > tmp; j -= gap) a[j + gap] = a[j]; a[j + gap] = tmp; }}void ShellSort(datatype a[], int left, int right){ int gap = (right - left + 1) \\\/ 2, i;\\\/*步长gap初始化为n\\\/2取下整*\\\/ while(gap > 0) { for(i = left; i < gap; i++) \\\/*对每个子序列进行直接插入排序*\\\/ InsertSort(a, i, right, gap); gap = gap \\\/ 2; \\\/*将步长缩小为原来的一半并取下整*\\\/ }}

希尔排序的时间复杂度和数组的初始排序有关吗

为什么

有关。

希尔排序实际上是一种插入排序,它的时间复杂度和数组初始排序有关。

平时我们所说的时间复杂度都是它的平均时间复杂度。

关于希尔排序和增量的问题。

像这个我们一般去d=6如果取d=4 那么就把第一个数与第五个数与第九个数比较小的放在前面 15...16...17第二个数与第六个数与第十个数比较,.2...5...9....4...8...13....18...24...25..一趟扫描结果为:15,2,4,18,16,5,8,24,17,9,13,25

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片