Tworzenie kopca

0

Witam! Próbuję sam napisać tworzenie kopca. Nie wiem dlaczego, dla małych danych chodzi, a dla n = 1000 się wysypuje:

 
void budkop(int tab[], int n, int i)
{	
	int temp;
	int parent, l, r;
	if(i>=0){
	parent = i;
	l = 2*i +1;
	r = 2*i+2;
	cout<<parent<<endl<<l<<endl<<r;
	int max = i;
	if(l <= n-1 && tab[max] < tab[l]) max = l;
	if(r <= n-1 && tab[max] < tab[r]) max = r;
	if(max != i)
	{	
		swap(tab[max],tab[i]);
		if(max <= (n/2 -1)) i = max;
		else i--;
		budkop(tab,n,i);
	}
	if(max == i){
	 i--;
	 budkop(tab,n,i);}
	}
}

Nie chciałbym zmieniać całego kodu. Co tu jest źle? jako argumenty przekazuje tablice n elementowa, n, i jako i (n/2)-1

0

Jak wrócę to postaram się znaleźć błąd, na razie łap poprawne budowanie kopca :)

void heapify(int a[], int i, int n)
{
    int ind_max=i;
    if(left(i)<n&&a[left(i)]>a[ind_max])
        ind_max=left(i);
    if(right(i)<n&&a[right(i)]>a[ind_max])
        ind_max=right(i);
    if(ind_max!=i)
    {
        swap(a[i],a[ind_max]);
        heapify(a,ind_max,n);
    }
}
void buildheap(int a[],int n)
{
    for(int i=parent(n-1);i>=0;i--)
    {
        heapify(a,i,n);
    }
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1