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 Trung Thông viết 21:14 ngày 30/09/2018

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.

Gió viết 21:28 ngày 30/09/2018

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:

  • hàm init: item=new int[n+1]
  • hàm Build_maxheapify: for(…;i>0;…)
  • hàm heapsort: maxheapify(A,1)
  • hàm print: i=1;i<=A.Size;…
    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
Leng Keng viết 21:20 ngày 30/09/2018

câu hỏi của bạn không nêu rõ vấn đề, mình chịu thui.

Bài liên quan
0