lyshine
V2EX  ›  问与答

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

  •  
  •   lyshine · Jan 29, 2019 · 1718 views
    This topic created in 2692 days ago, the information mentioned may be changed or developed.

    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);

    6 replies    2019-01-31 15:08:14 +08:00
    lyshine
        1
    lyshine  
    OP
       Jan 29, 2019
    不好意思, V2EX 似乎没法贴代码
    lyshine
        2
    lyshine  
    OP
       Jan 29, 2019
    大家凑合着看吧
    nichijou
        4
    nichijou  
       Jan 29, 2019
    markdown 了解一下

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

    在选中的循环里,每回都是一次 insertion sort, 如果满足了 arr[j] > arr[fraction + j] ,swap 之后还要继续和前面的比,这也是该句表达式 用 fraction + j 表示后面一个值的 index 而没有直接用 i 的原因。
    nichijou
        5
    nichijou  
       Jan 29, 2019   ❤️ 1
    可以选择低速度观看。
    lyshine
        6
    lyshine  
    OP
       Jan 31, 2019
    @yukiww233 感谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2759 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:28 · PVG 10:28 · LAX 19:28 · JFK 22:28
    ♥ Do have faith in what you're doing.