**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);
}
}