建完堆之后堆顶是几
把乱序数组 17、24、15、13、23 就地整理成大顶堆。运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #in
先把下沉写出来
补全 sift_down(建堆全靠它)。把 {13, 24, 15} 的 0 号位置下沉一次,输出下沉后的第一个。 (本题用 g++ -std=c++17 -O0 编译。)
写一个建堆
补全 build_heap:从最后一个有孩子的节点起倒着依次下沉。补全后输出建好后的堆顶。 (本题用 g++ -std=c++17 -O0 编译。)
建好之后整个数组长什么样
同一个 build_heap。建完之后把整个数组拼起来输出(用 / 隔开)。 (本题用 g++ -std=c++17 -O0 编译。)
验一验建出来的是不是堆
补全 check_heap:每个位置和它的孩子比一遍,都不小于就返回 true。拿建好的那个数组来验,输出结果。 (本题用 g++ -std=c++17 -O0 编译。)
用堆求第 K 大怎么做
用大顶堆求第 K 大的值,做法是【0】。
只要前 K 个不排全序的好处
只求前 K 大而不把整个数组排序,好处是【0】。
数据特别大时更省的做法
第 1 步:先装前 3 个:顶是最小的 8 第 2 步:26 比顶上的 8 大 第 3 步:换掉 8,重新整理 第 4 步:5 比 12 小:不要 第 5 步:21 比 12 大:换进来 第 6 步:剩下的就是最大的 3 个 8 30 12
第二大的是几
堆是 24、23、15、13、17。运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #include <ut
前三大是哪几个
同一个堆。运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #include <utility> #in