OlveraeUNSW
返回题目列表
COMP2521

堆 · 插入并上浮

堆 · 插入并上浮(建一个最大堆)

依次读入若干整数,按输入顺序用「插入 + 上浮(sift-up)」把它们建成一棵最大堆,最后按数组顺序(即 index 0,1,2,…)输出整个堆。

最大堆用数组 h[] 存储(0-indexed):index i 的父亲是 (i-1)/2,左右孩子是 2i+1 / 2i+2。请补全 insert:把新值放到数组末尾,再不断和父亲比——比父亲大就交换、往上浮,直到 ≤ 父亲或浮到根 index 0。

易错点:上浮的停止条件是「h[i] <= h[父] 或 i == 0」。漏掉 i==0 会在根上继续算父亲下标而出错;把 <= 写成 < 在有重复值时会多做无用交换。

输入

  • 第 1 行:整数 n(元素个数,可能为 0)。
  • 第 2 行:n 个整数,空格分隔,按此顺序插入。

输出

  • 一行:最终最大堆的数组内容,每个值后跟一个空格。

示例:输入 7 / 50 30 70 20 40 60 80 → 输出 80 40 70 20 30 50 60 (80 一路上浮成为堆顶)。

样例

stdin
7
50 30 70 20 40 60 80
期望输出
80 40 70 20 30 50 60 
stdin
1
42
期望输出
42 
c-dcc
14