Heapsort przypadki

0

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

debugger i jazda. Nikt za Ciebie tego nie zrobi

albo wejdz na http://eduinf.waw.pl/inf/alg/003_sort/0017.php i porownuj co jest nie tak

0

Dzięki za podpowiedź jednak nie mam jak skorzystać z debugera.

Trzeba to napisać w notatniku i kompilować z konsoli z użyciem MinGW.

Porównywanie to pierwsza rzecz, którą zrobiłem i wydaje mi się, że jest dobrze.

0

MinGW przychodzi z GDB. Poprawnie napisany kod jest przenaszalny między kompilatorami i systemami, więc możesz korzystać z innych debuggerów. A pisanie w notatniku to niby jak będzie sprawdzone? :)

0

to uzyj gdb i mozesz debugowac jaki chcesz program, nawet pisany w notatniku

0

Rozgryzłem problem.

Algorytm działa dobrze dla tablicy [1...N]

A ja mam wypełnioną w ten sposób:
od 0 do n - 1;

Najprościej jest zmienić inicializacje tablic na od 1 do n i stowrzyć int A[size + 1];

Wtedy zerowy element jest pusty.

Po takim zabiegu sortowanie działa dobrze jednak nie mogę sobie na to pozwolić bo w jednym programie są 3 tablice i wiele algorytmów sortowania i taka zmiana dla Heapsorta wpływa negatywnie na pozostałe.

Więc muszę jakoś objeść to w samym heapsorcie.

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