希尔排序(shell_sort)

写希尔排序中的一点想法

希尔排序是非稳定算法。

基本思想
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。
(图片描述以及源代码可以见https://blog.csdn.net/xiaocherry1128/article/details/76576305

while (end >= 0 && arr[end] > temp)  //若前面位置(arr[end])大于后面(arr[idx])
			{
				arr[end + gap] = arr[end];    //arr[end]后移
				end -= gap;                   //找到前一个距离为gap的位置,再进行比较,决定是否要继续后移  
			}
			arr[end + gap] = temp;
		}

我对while中的内容感到疑惑,为什么要用while,直接用以下代码

if(arr[end] > arr[idx] )
swap(arr[end],arr[idx])

不就行了吗?

运行几次后 观察了挺久,数组的排序一直是错误的。
思考了一会发现,这里的排序只是针对当前的end和idx,并没有对往前距离为gap的数进行排序。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值