这是一个SHELL排序法的例子,中间有点问题不懂//ntn 是数组的个数 for(gap = ntn /2; gap > 0; gap /=2) { for(i = gap; i < ntn; i++){ for(j = i-gap; j>=0; j-=gap){ 这里是比较交换的部分 } } }我

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 10:18:39

这是一个SHELL排序法的例子,中间有点问题不懂//ntn 是数组的个数 for(gap = ntn /2; gap > 0; gap /=2) { for(i = gap; i < ntn; i++){ for(j = i-gap; j>=0; j-=gap){ 这里是比较交换的部分 } } }我
这是一个SHELL排序法的例子,中间有点问题不懂
//ntn 是数组的个数
for(gap = ntn /2; gap > 0; gap /=2) {
for(i = gap; i < ntn; i++){
for(j = i-gap; j>=0; j-=gap){
这里是比较交换的部分
}
}
}
我不明白的地方是,为什么要j -= gap,这样一来,不是有了很多重复的比较, 比如说
i = 5, gap=1, 这时候j从4开始,比较位置4和5,然后j -= gap,这时候j=3,比较3和4的位置,可是这之前在i = 4的时候,已经比较过了啊
请高人帮助!

这是一个SHELL排序法的例子,中间有点问题不懂//ntn 是数组的个数 for(gap = ntn /2; gap > 0; gap /=2) { for(i = gap; i < ntn; i++){ for(j = i-gap; j>=0; j-=gap){ 这里是比较交换的部分 } } }我
你好,希尔算法的基本思想是,利用一个增量序列,让待排序数组逐渐有序.
针对上面的算法,其实当gap等于1的时候,shell算法实际都退化成了简单插入排序.
至于楼主针对上面的算法提出的问题,的确,数组的3、4位置一定会比较多次,但是,有可能的是这两个位置的实际数值,已经不同.因为,先后两次比较的时候,整个待排序数组的位置已经有了改变.
不过,楼主上面的希尔算法可以进一步改进.让其减少无效的比较次数.

这是一个SHELL排序法的例子,中间有点问题不懂//ntn 是数组的个数 for(gap = ntn /2; gap > 0; gap /=2) { for(i = gap; i < ntn; i++){ for(j = i-gap; j>=0; j-=gap){ 这里是比较交换的部分 } } }我 冒泡排序法是如何排序的?C语言中编程中的冒泡排序法,最好给一个例子~ shell排序法是怎么实现?有关键码(16,9,4,25,15,2,13,18,17,5,8,24)递增次序,接下..用初始增量为4的shell排序法,一趟扫描后的结果为? 在最坏的情况下,希尔排序法(shell sort)所需要的比较次数为 O(n1.5),这里的O表示什么意思,举例说明! 谁能帮我解释下shell排序法啊?不太明白,求人帮解释,不甚感激. 在最坏的情况下,希尔排序法(shell sort)所需要的比较次数为 O(n1.5)还有类似的象,在最坏的情况下,堆-排序需要比较的次数为 O(nlog2n)这其中的O代表什么啊? 在cshell 中如何给一个数组追加元素?或者说c shell 中咋样定义一个动态长度的数组?最好能举一个简单的例子 SHELL 采用Shell排序的每一趟的结果,增量序列为{7,3,1}.{9,8,7,6,5,4,3,2,1}. C语言中快速排序法是怎么用的,请给个例子进行说明?如题 有点像太阳的符号 中间一个黑圈 一个女的唱的.中间有点调调是最爱你的人是我的歌曲.叫什么. 举一个状语在句子中间的例子 举一个状语在句子中间的例子 1和2排序,1和2排序,1个数不能连续排11次以上,问第101、102位数应是1还是2?这是别人问我的,总觉得有点纠结, Linux下的Shell编程变量是怎样定义的... shell 利己代理举例子.请举一个利己代理的例子,否则含义有点难以理解. 英语大小写word表格中,一般是中英文对照,比如shell flange规范的写法怎么写?是全部小写,首字母大写还是每个单词首字母大写?例如:shell flange,Shell flange or Shell Flange.