返回题目列表
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