**Zwracam się z prośbą o wytknięcie błędu. Poniżej próbuję zaimplementować Heapsort. Nie wiem co robię nie tak. Wydaje mi się, że błąd jest w zamienianiu swapem, ale niby wygląda ok.
Proszę o pomoc.

 #include <stdio.h>
#include <time.h>
#define ROZMIAR 15

int parent(int i);
int left(int i);
int right(int i);
void BuildHeap(int tab[], int d);
void Heapify(int tab[], int d, int index);
void swap(int *high, int *low);
void HeapSort(int tab[],int d);


int main() {
	
	int t[ROZMIAR];
	int i;
	
	printf("Tablica przed sortowaniem Heapsort\n");
	
	srand((int)time(0));
	for(i=0;i<ROZMIAR;i++)
		t[i]=rand()%40;
	for(i=0;i<ROZMIAR;i++)
		printf("%d ",t[i]);		
	
	HeapSort(t,ROZMIAR);
	
	printf("\n\nTablica po sortowaniu Heapsort\n");
	for(i=0;i<ROZMIAR;i++)
		printf("%d ",t[i]);	
	
	return 0;
}


//zwracaja indexy poszczegolnych kopkow

int parent(int i){
	return (i-1)/2;
}
int left(int i){
	return (2i+1);
}
int right(inti){
	return (2i+2);
}

// tablica transformuje w kopiec
void BuildHeap(int tab[], int d){
	
	int j;
	
	for(j=parent(ROZMIAR-1);j>=0;j--)
		Heapify(tab,ROZMIAR,j);
	
}

// zamiana wartosci mniejsza - > wieksza
void Heapify(int tab[], int d, int index){
	
	int max_ind=index;
	
	if( left(index)<d && tab[left(index)]>tab[max_ind] )
		max_ind=left(index);
	if( right(index)<d && tab[right(index)]>tab[max_ind] )
		max_ind=right(index);
		
	if(max_ind!=index){
		swap(&tab[index],&max_ind);
		Heapify(tab,d,max_ind);
	}
	
}

// zamien dwie warotsci
void swap(int *high, int *low){
	
	int tmp;
	
	tmp=*high;
	*high=*low;
	*low=tmp;	
	
}

// funkcja sortujaca
void HeapSort(int tab[],int d){
	
	int k;
	
	BuildHeap(tab,d);
	for(k=d-1;k>0;k--){
		swap(tab,&tab[k]);  // tu jest coś nie tak, lecz nie wiem co.
		Heapify(tab,k,0);
	}
	
}