Witam. Na zajęciach stworzyliśmy algorytm jak poniżej. Prosiłbym o weryfikację, jako, że sortowanie jest błędne.
void heapty (int tab[], int o, int heapsize) // o - ojciec, l - left, r- right
{
int l = 2 * o;
int r = (2 * o) + 1;
int largest;
if (l <= heapsize && tab[o] < tab[l])
largest = l;
else
largest = o;
if (r <= heapsize && tab[largest] < tab[r]) // wyznaczanie indeksu odnoszącego się do największego elementu tablicy
largest = r;
if (largest != o)
{
swap(tab[o], tab[largest]); // zamiana ojca z największym elementem
heapty(tab, largest, heapsize); // rekurencja
}
}
void build_heap(int tab[], int heapsize) // budowa kopca
{
for (int i = heapsize/2; 0 <= i; i--)
heapty(tab, i, heapsize);
}
void heap_sort(int tab[], int size)
{
int heapsize = size;
build_heap(tab, heapsize); // budowa kopca
do {
swap(tab[0], tab[heapsize]); // zamieniamy największy z ostatnim
heapsize--; // zmniejszamy rozmiar tablicy, największe elementy odkładają się na ostatnich indeksach tablicy
heapty(tab, 0, heapsize);
} while (heapsize > 0);
}
int main()
{
const int d = 10;
int tab2[d] = { 23, 45, 23, 11, 24, 65, 931, 11, 2, 40 };
cout << "PRZED SORTOWANIEM:" << endl << endl;
for (int i = 0; i < d; i++) // wypisanie posortowanej tablicy
cout << "tab[" << i << "] = " << tab2[i] << endl;
cout << endl;
heap_sort(tab2, d);
cout << "PO SORTOWANIU:" << endl << endl;
for (int i = 0; i < d; i++) // wypisanie posortowanej tablicy
cout << "tab[" << i << "] = " << tab2[i] << endl;
system("pause");
return 0;
}