heapsort be sorting now

This commit is contained in:
2025-04-16 17:35:33 +02:00
parent d7cccb791a
commit 9180586d50
2 changed files with 22 additions and 35 deletions
BIN
View File
Binary file not shown.
+22 -35
View File
@@ -2,17 +2,15 @@
#include <stdlib.h>
void Heapify(int A[], int i, int heapsize) {
int left = 2 * i +1;
int right = (2 * i) + 2;
int left = 2 * i;
int right = 2 * i + 1;
int largest = i;
if (left <= heapsize && A[left] > A[largest]) {
if (left < heapsize && A[left] > A[largest]) {
largest = left;
} else {
largest = i;
}
if (right <= heapsize && A[right] > A[largest]) {
if (right < heapsize && A[right] > A[largest]) {
largest = right;
}
@@ -24,6 +22,22 @@ void Heapify(int A[], int i, int heapsize) {
}
}
void BuildHeap(int A[], int size) {
for (int i = size / 2 - 1; i >= 0; i--) {
Heapify(A, i, size);
}
}
void HeapSort(int A[], int size) {
BuildHeap(A, size);
for (int i = size - 1; i > 0; i--) {
int temp = A[0];
A[0] = A[i];
A[i] = temp;
Heapify(A, 0, i);
}
}
int main() {
int size;
int res = scanf("%d", &size);
@@ -31,6 +45,7 @@ int main() {
fprintf(stderr, "Error reading size\n");
return 1;
}
int *array = malloc(sizeof(int) * size);
for (int i = 0; i < size; i++) {
res = scanf("%d", &array[i]);
@@ -41,35 +56,7 @@ int main() {
}
}
printf("pre heap:");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
// Build the heap
for (int i = size / 2 - 1; i >= 0; i--) {
Heapify(array, i, size);
}
printf("\npost heap:");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
int heapsize = size;
for (int i = size - 1; i >= 0; i--) {
int temp = array[i];
array[i] = array[1];
array[1] = temp;
heapsize--;
Heapify(array, i, heapsize);
}
printf("\npost sort:");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
HeapSort(array, size);
free(array);
return 0;