- 论坛徽章:
- 0
|
我利用我的公式(所包含的思路)对shellsort作了一下验证,我发现shellsort的一处,i++, i+=gap即可。
我查到的shellsort,都是i++,那么这个地方,要么我对,要么我错,我验证了一下,用我改过的shellsort,sort了几次,都是成功的。
我猜测Shell本人在发明出这个算法后,认为不会有人轻易的还原出来里面的思路,所以,他开了一个小小的玩笑。这样,当有人成功还原出来这个思路,这个玩笑也就结束了。
看了,这个玩笑坚持了很多年。
现在大家可以帮我验证一下。
改过的算法如下,
- /*
- * Shellsort, revised version, Yu Fei.
- *
- * a is the name of array.
- * n is it's length.
- */
- shellsort(int *a, int n)
- {
- int gap, i, j;
- int temp;
- for(gap=n/2; gap>0; gap/=2)
- for(i=gap; i<n; i+=gap)
- for(j=i-gap; j>=0 && a[j]>a[j+gap]; j-=gap)
- {
- temp = a[j];
- a[j] = a[j+gap];
- a[j+gap] = temp;
- }
- }
复制代码
[ 本帖最后由 勿丑于 于 2009-8-25 14:36 编辑 ] |
|