Przy implementacji sortowanie działa prawdiłowo tylko gdy pierwsza liczba jest najmniejsza. Jeśli nie to pierwsza jest bez zmian ale kolejne są już dobrze posortowane.
Nie mogę znaleźć odpowiedzialnego za to fragmentu.
Dla: 1, 5, 2, 2, 6, 3
Wypisze: 1, 2, 2, 3, 5, 6
Ale dla: 5, 2, 2, 6, 3, 1
Wypisze: 5, 1, 2, 2, 3, 6
Tablice tworze: int A[arraySize] = // bla bla
A wywołuje Heapsort(A, arraySize - 1);
void Max_Heapify(int A[], int size, int i) {
int l = 2*i,
r = (2*i) + 1,
largest,
temp;
if(l <= size && A[l] > A[i])
largest = l;
else
largest = i;
if(r <= size && A[r] > A[largest])
largest = r;
if(largest != i) {
temp = A[largest];
A[largest] = A[i];
A[i] = temp;
Max_Heapify(A, size, largest);
}
}
void Build_Max_Heap(int A[], int size) {
for(int i = size / 2; i >= 1; i--)
Max_Heapify(A, size, i);
}
void Heapsort(int A[], int size) {
int temp;
Build_Max_Heap(A, size);
for(int i = size; i >= 2; i--) {
temp = A[i];
A[i] = A[1];
A[1] = temp;
size--;
Max_Heapify(A, size, 1);
}
}