• 算法导论6.58堆排序K路合并


    一、题目:请给出一个时间为O(nlgk)、用来将k个已排序链表合成一个排序链表算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并)

    二、步骤:

    step1:取每个链表的第一个元素,构造成一个含有k个元素的堆

    step2:把根结点的值记入排序结果中。

    step3:判断根结点所在的链表,若该链表为空,则go to step4,否则go to step5

    step4:删除根结点,调整堆,go to step2

    step5:把根结点替换为原根结点所在链表中的第一个元素,调整堆,go to step 2

    三、代码:





    四、输出结果

    显示待排序数据
    0:
    47 40 39 34 21 12
    1:
    50 38 36 35 31 30 24 23 19 18 9 4 3
    2:
    49 42 37 33 32 28 26 25 20 15 14 8
    3:
    44 43 27 22 17 10 7 6 2 1
    4:
    48 46 45 41 29 16 13 11 5
    输出合并结果
    50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24
     23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 请按任意键继续. . .

  • 相关阅读:
    项目开发环境
    angluarjs2入门学习资源
    mosquitto安装和测试
    loj#6031. 「雅礼集训 2017 Day1」字符串(SAM 广义SAM 数据分治)
    loj#6030. 「雅礼集训 2017 Day1」矩阵(贪心 构造)
    loj#6029. 「雅礼集训 2017 Day1」市场(线段树)
    HDU4609 3-idiots(生成函数)
    loj#6436. 「PKUSC2018」神仙的游戏(生成函数)
    BZOJ3028: 食物(生成函数)
    洛谷P4841 城市规划(生成函数 多项式求逆)
  • 原文地址:https://www.cnblogs.com/windmissing/p/2559802.html
Copyright © 2020-2023  润新知