diff --git a/heapsort b/heapsort index df90b1e..6258740 100755 Binary files a/heapsort and b/heapsort differ diff --git a/heapsort.c b/heapsort.c index 16fd0c2..b022c67 100644 --- a/heapsort.c +++ b/heapsort.c @@ -2,17 +2,15 @@ #include 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;