有大神能帮助讲解一下希尔排序的实现方式吗? 看不懂啊

2019-01-29 17:36:47 +08:00
 lyshine

var arr = [49, 38, 65, 97, 76, 13, 27, 49, 55, 04]; var len = arr.length; for (var fraction = Math.floor(len / 2); fraction > 0; fraction = Math.floor(fraction / 2)) { for (var i = fraction; i < len; i++) { for (var j = i - fraction; j >= 0 && arr[j] > arr[fraction + j]; j -= fraction) { // 为什么要 j-=fraction var temp = arr[j]; arr[j] = arr[fraction + j]; arr[fraction + j] = temp; } } } console.log(arr);

1226 次点击
所在节点    问与答
6 条回复
lyshine
2019-01-29 17:38:52 +08:00
不好意思, V2EX 似乎没法贴代码
lyshine
2019-01-29 17:39:10 +08:00
大家凑合着看吧
yukiww233
2019-01-29 17:42:30 +08:00
nichijou
2019-01-29 18:19:19 +08:00
markdown 了解一下

https://i.loli.net/2019/01/29/5c50277399d4a.png

在选中的循环里,每回都是一次 insertion sort, 如果满足了 arr[j] > arr[fraction + j] ,swap 之后还要继续和前面的比,这也是该句表达式 用 fraction + j 表示后面一个值的 index 而没有直接用 i 的原因。
nichijou
2019-01-29 18:20:44 +08:00
<amp-youtube data-videoid="n4sk-SzGvZA" layout="responsive" width="480" height="270"></amp-youtube> 可以选择低速度观看。
lyshine
2019-01-31 15:08:14 +08:00
@yukiww233 感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/531662

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX