heapsort be sorting now
This commit is contained in:
+22
-35
@@ -2,17 +2,15 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
void Heapify(int A[], int i, int heapsize) {
|
void Heapify(int A[], int i, int heapsize) {
|
||||||
int left = 2 * i +1;
|
int left = 2 * i;
|
||||||
int right = (2 * i) + 2;
|
int right = 2 * i + 1;
|
||||||
int largest = i;
|
int largest = i;
|
||||||
|
|
||||||
if (left <= heapsize && A[left] > A[largest]) {
|
if (left < heapsize && A[left] > A[largest]) {
|
||||||
largest = left;
|
largest = left;
|
||||||
} else {
|
|
||||||
largest = i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (right <= heapsize && A[right] > A[largest]) {
|
if (right < heapsize && A[right] > A[largest]) {
|
||||||
largest = right;
|
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 main() {
|
||||||
int size;
|
int size;
|
||||||
int res = scanf("%d", &size);
|
int res = scanf("%d", &size);
|
||||||
@@ -31,6 +45,7 @@ int main() {
|
|||||||
fprintf(stderr, "Error reading size\n");
|
fprintf(stderr, "Error reading size\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int *array = malloc(sizeof(int) * size);
|
int *array = malloc(sizeof(int) * size);
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
res = scanf("%d", &array[i]);
|
res = scanf("%d", &array[i]);
|
||||||
@@ -41,35 +56,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("pre heap:");
|
HeapSort(array, size);
|
||||||
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]);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(array);
|
free(array);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user