使用数组形成堆

发布于 2024-12-10 14:16:49 字数 1170 浏览 0 评论 0原文

我正在尝试使用以下代码形成堆,但不确定为什么它没有显示正确的输出。

#include <iostream>

using namespace std;

int h[10], n;

void heapbottom()
{
    int i, j;
    for (i = n / 2; i >= 1; i--) {
        int k = i;
        int v = h[k];
        bool heap = false;
        while (!heap && 2 * k <= n) {
            cout << "\n i value is :" << i;
            j = 2 * k;
            if (j < n)          //there sre 2 children
            {
                if (h[j] < h[j + 1])
                    j++;
            }
            if (v >= h[j])
                heap = true;
            else {
                h[k] = h[j];
                k = j;
            }

            h[k] = v;
        }                       //end of while

    }
    cout << "\n HEAP GENERATED \n";
    for (int i = 0; i < n; i++)
        cout << "\n ELEMENT IS:" << h[i];
}

int main()
{

    cout << "\n Enter the maximum number of array elements \n";
    cin >> n;
    cout << "\n Enter the array to perform heap sort \n";
    for (int i = 0; i < n; i++)
        cin >> h[i];

    heapbottom();

    return 0;
}

I am trying to form a heap using the following code ,But not sure why its not showing the correct output.

#include <iostream>

using namespace std;

int h[10], n;

void heapbottom()
{
    int i, j;
    for (i = n / 2; i >= 1; i--) {
        int k = i;
        int v = h[k];
        bool heap = false;
        while (!heap && 2 * k <= n) {
            cout << "\n i value is :" << i;
            j = 2 * k;
            if (j < n)          //there sre 2 children
            {
                if (h[j] < h[j + 1])
                    j++;
            }
            if (v >= h[j])
                heap = true;
            else {
                h[k] = h[j];
                k = j;
            }

            h[k] = v;
        }                       //end of while

    }
    cout << "\n HEAP GENERATED \n";
    for (int i = 0; i < n; i++)
        cout << "\n ELEMENT IS:" << h[i];
}

int main()
{

    cout << "\n Enter the maximum number of array elements \n";
    cin >> n;
    cout << "\n Enter the array to perform heap sort \n";
    for (int i = 0; i < n; i++)
        cin >> h[i];

    heapbottom();

    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

栀子花开つ 2024-12-17 14:16:49

如果我将外部循环更改为,

for (i = n / 2; i >= 0; i--)

我会得到 9 8 7 6 5 2 结果,我相信这是一个有效的堆。

If I change the outer loop to be

for (i = n / 2; i >= 0; i--)

I get 9 8 7 6 5 2 as a result, which I believe is a valid heap.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文