#include <stdio.h> void heap_adjust(int a[], int start, int end) { int temp; int i; temp = a[start]; for (i = 2 * start + 1; i <= end; i = i * 2 + 1) { if (i < end && a[i] > a[i+1]) { i++; } if (temp <= a[i]) { break; } else { a[start] = a[i]; start = i; } } a[start] = temp; } void heap_create(int a[], int n) { int i; for (i = n/2 - 1; i >= 0; i--) { heap_adjust(a, i, n - 1); } } void heap_sort(int a[], int n) { int i; for (i = 1; i < n; i++) { printf("%d ", a[0]); a[0] = a[n - i]; heap_adjust(a, 0, n - 1 - i); } } /* 面试题30:最大的k个数 */ void get_biggest_k_numbers(int input[], int n, int k) { int i; if (!input || n <= 0 || n < k || k <= 0) { return; } heap_create(input, k); for (i = k; i < n; i++) { if (input[i] > input[0]) { input[0] = input[i]; heap_adjust(input, 0, k - 1); } } }