试图实现堆程序,找不到我错的地方

Trying to implement heapify procedure , could not find error where I am wrong

本文关键字:找不到 实现 程序      更新时间:2023-10-16

我使用一种简单的方法以自下而上的方式将数组转换为堆。我找不到错误。有人能看一下并告诉我吗。

基本上,我是以自下而上的方式从一个随机数组中提取。

for(int i=n/2;i>=1;i--)
        {
                    heapify(i,n,arr);
        }

堆积程序存在一些问题,有时会给出正确的结果,但大多数情况下是错误的。

`#include<iostream>
#include<conio.h>
using namespace std;
int min(i
nt x,int y,int z)
{
    return ((x>y?x:y)>z?(x>y?x:y):z);
}
int left(int i)
{
    return (2*i);enter code here
}
int right(int i) 
{
    return (2*i+1);
}
int parent(int i)
{
    return (i/2);
}
int heapify(int i,int n,int arr[])
{
    int temp;
    int l=left(i);
    int r=right(i);
    temp=i;
    if(l<=n&&arr[l]<arr[i])
    temp=l;
    else if(r<=n&&arr[temp]>arr[r])
    temp=r;
    if(temp!=i)
    {
               int x=arr[temp];
               arr[temp]=arr[i];
               arr[i]=x;
               heapify(temp,n,arr);
    }   
    //else return 0;
}
int deletemin(int n,int arr[])
{
               cout<<arr[1]<<"ndeLetedn";   
               arr[1]=arr[n];
}
int insert(int x,int size,int arr[])
{
    arr[size]=x;
    int i=(size);
    do
    {
    i=parent(i);
    if(arr[i]!=min(arr[i],arr[left(i)],arr[right(i)]))
    heapify(i,(size),arr);
    else
    return 0;
    }while(i!=1);
}
int main()
{
    int n,t,arr[100];
    cin>>t;
    while(t--)
    {
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>arr[i];
    for(int i=n/2;i>=1;i--)
    {
                heapify(i,n,arr);
    }
    for(int i=1;i<=n;i++)
    cout<<arr[i]<<" ";
    deletemin(n,arr);
    n--;
    heapify(1,n,arr);
    for(int i=1;i<=n;i++)
    cout<<arr[i]<<" ";
    int y;
    cout<<"what value do you want to insertn";
    cin>>y;
    n++;
    insert(y,n,arr);
    for(int i=1;i<=n;i++)
    cout<<arr[i]<<" ";
    }
    getch();
    return 0;
}
`

一个简单的观察结果是,您的min函数是错误的!它不返回3个数字中的最小值。暂时用if来做吧!