Min-Heap,基于零的数组C
min-heap with zero based array C++
以下是我的程序,使用本书中具有标准逻辑的基于0的基于0的数组来构建一个小型。我正在使用2*i+1
作为左儿童,而2*i+2
为右子儿童使用,因为它的基于零的数组,但我仍然遇到了错误的输出。我想念什么?
#include <iostream>
#include <vector>
#include <algorithm>
using std::vector;
using std::cin;
using std::cout;
class HeapBuilder {
private:
vector<int> data_;
void WriteResponse() const {
for (int i = 0; i < data_.size(); ++i) {
cout << data_[i] << "n";
}
}
void ReadData() {
int n;
cin >> n;
data_.resize(n);
for (int i = 0; i < n; ++i)
cin >> data_[i];
}
void MinHeapSort(int index)
{
int left = (2 * index) + 1;
int right = (2 * index) + 2;
int smallest;
if (left < data_.size() && data_[left] < data_[index])
smallest = left;
else
smallest = index;
if (right < data_.size() && data_[right] < data_[index])
smallest = right;
if (smallest != index)
{
swap(data_[smallest], data_[index]);
MinHeapSort(smallest);
}
}
void Heapify() {
for (int i = (data_.size() - 1) / 2; i >= 0; i--)
{
MinHeapSort(i);
}
}
public:
void Solve() {
ReadData();
Heapify();
WriteResponse();
}
};
int main() {
std::ios_base::sync_with_stdio(false);
HeapBuilder heap_builder;
heap_builder.Solve();
return 0;
}
用
替换if (right < data_.size() && data_[right] < data_[index])
if (right < data_.size() && data_[right] < data_[smallest])
有效的,愚蠢的错误。
相关文章:
- 如何将零填充的多维数组传递给 C++ 中的函数?
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 定义不带大小或零大小的数组
- 适用于大型数组的无复制线程安全环形缓冲区
- 此数组中的某些值无缘无故变为零 (0)
- 为什么数组的 GCC 聚合初始化首先用零填充整个事物,包括非零元素?
- 需要生成一个检测数组中零的函数
- 2D 矢量数组用零而不是双精度值填充
- 使用值初始化的数组对零初始化数据
- 将数据从字节数组(带零)传递到字符串流(字符串流)
- 如何在 O(1) 中将数组归零
- 如何将新数组归零
- 如何将包含其他结构和数组的整个结构对象数组清零
- C++While循环,如果数组等于零,则停止该循环
- 在cpp中初始化数组并用零填充
- 这是将数组归零最快的方法
- 将struct数组归零
- 在c++中,将结构内部的数组归零