写希尔排序中的一点想法
希尔排序是非稳定算法。
基本思想
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。
(图片描述以及源代码可以见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的数进行排序。