30/09/2018, 19:13
Giúp mình với. làm sao để chạy đây
#include<iostream>
using namespace std;
struct HEAP{
int *item;
int Lenght;
int Size;
};
//Khởi tạo
void Init(HEAP &A, int n)
{
A.Lenght= 0;
A.Size= n;
A.item= new int [n];
}
int Parent(int i)
{
return i/2;
}
int Left(int i)
{
return 2*i;
}
int Right(int i)
{
return 2*i+ 1;
}
void MaxHeapify(HEAP &A, int i)
{
int r, l, Largest;
r= Right(i);
l= Left(i);
if(l <= A.Size && A.item[l] > A.item[i])
{
Largest= l;
}
else
{
Largest= i;
}
if(r <= A.Size && A.item[Largest] < A.item[r])
{
Largest= r ;
}
if(i != Largest)
{
swap(A.item[Largest], A.item[i]);
MaxHeapify(A, Largest);
}
}
void Build_MaxHeapify(HEAP &A)
{
A.Lenght= A.Size;
for(int i=A.Lenght / 2; i >= 0; i--)
{
MaxHeapify(A, i);
}
}
void HeapSort(HEAP &A)
{
Build_MaxHeapify(A);
for(int i= A.Lenght; i >= 1; i--)
{
swap(A.item[1],A.item[i]);
A.Size--;
MaxHeapify(A, 0);
}
}
void Print(const HEAP &A)//In cac phan tu trong hang
{
for(int i= 0; i< A.Lenght; i++)
{
cout<< A.item[i]<<" ";
}
}
void Push(HEAP &A, int k)
{
A.Lenght++;
int i= A.Lenght;
A.item[i]= k;
}
int main()
{
HEAP A;
Init(A, 10);
Push(A, 5);
Push(A, 13);
Push(A, 2);
Push(A, 25);
Push(A, 7);
Push(A, 17);
Push(A, 20);
Push(A, 8);
Push(A, 4);
Push(A, 10);
HeapSort(A);
Print(A);
system("pause");
}
Bài liên quan
bạn học cách đặt câu hỏi lại nha, mình thấy hơi bực mình mấy câu hỏi như bạn, thân.
Mình nghĩ nếu bạn dùng heap với chỉ số bắt đầu =1 thì có 1 số lỗi sau:
Bạn sửa hết lỗi trên chắc là ok
Chúc bạn mội năm mới ít bug hơn
câu hỏi của bạn không nêu rõ vấn đề, mình chịu thui.