#include <stdio.h> void info(int A[], int len) { int i; for (i = 0; i < len; i++) printf("%d ", A[i]); printf("\n"); } void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void max_heapify(int A[], int i, int len) { int largest; int left = ((i+1) << 1) - 1; if (left < len && A[left] > A[i]) largest = left; else largest = i; int right = (i+1) << 1; if (right < len && A[right] > A[largest]) largest = right; if (largest != i) { swap(&A[i], &A[largest]); max_heapify(A, largest, len); } } void build_max_heap(int A[], int len) { int i; for (i = len/2 - 1; i >= 0; i--) max_heapify(A, i, len); } void heapsort(int A[], int len) { int i; build_max_heap(A, len); for (i = len - 1; i >= 1; i--) { swap(&A[0], &A[i]); max_heapify(A, 0, i); } } void test(int A[], int len) { heapsort(A, len); info(A, len); } int main(int argc, const char *argv[]) { int a3[] = {1, 10, 7}; test(a3, 3); int a5[] = {1, 10, 6, 20, 9}; test(a5, 5); int a6[] = {12, 23, 2, 20, 100, 4}; test(a6, 6); return 0; }