如何在C ++中实现最小堆

时间:2018-08-06 12:38:26

标签: c++ arrays stl heap heapsort

我必须将文件中的所有数据(整数)读入数组,然后对数组进行迭代以最小化堆并将其添加到当前堆的最后一个元素之后。读入数组后,我必须调用SiftUp()。在所有输入的末尾,我试图打印出最小堆数组的前五个元素。输出给我以下错误。

发生错误:

[Error] invalid conversion from 'int' to 'int*' [-fpermissive]

我的程序:

using namespace std;

int heapSize;
void SiftUp(int arr[], int heapSize);
const int arr_Size=500;
int heapArr[arr_Size];

int main()
{
    int integers;
    string fileName;
    ifstream infile;
    cout << "Please enter the name of the file to open :";
    cin >> fileName; 
    infile.open(fileName.c_str()); 

    if(!infile)
    {
        cerr << "An eror occurred while openieng the file.";
        exit(1);
    }

    while(!infile.eof())
    {
        for (int i=0; i<arr_Size; i++)
        {
            infile >> integers;
            heapArr[i]=integers;
            heapSize=i;
            cout << "numbers " << heapArr[i] << endl;
            SiftUp(heapArr[i],heapSize);       // Error: invalid conversion
        }
    }

    infile.close();
    return 0;
}

void SiftUp(int arr[], int heapSize)
{
    int p;

    if (heapSize==1)
        return;
    else p = heapSize/2;

    if (arr[p] > arr[heapSize])
        return;
    else swap (arr[heapSize],arr[p]);

    SiftUp(arr[], p);   // Error : expected primary-expression before ']'

    for (int count =0 ; count <5 ; count ++)
    {
        cout << " at index 1 : " << arr[count] << endl;
    }
}

2 个答案:

答案 0 :(得分:3)

请阅读这篇有关变色龙问题的文章。 https://meta.stackexchange.com/questions/43478/exit-strategies-for-chameleon-questions现在到当前问题。

void SiftUp(int arr[], int heapSize);

您的函数需要一个数组,然后是一个整数。

SiftUp(heapArr[i],heapSize);

您将一个int和一个int传递给您的函数。编译器拒绝将您的int解释为int *(因为这样做会是一个糟糕的主意)。尝试将数组和int传递给函数。

SiftUp(heapArr,heapSize);

这里是C ++数组的参考。 http://www.cplusplus.com/doc/tutorial/arrays/

答案 1 :(得分:1)

EXISTS