剑指OFFER之最小堆篇

来源:互联网 发布:蓝光播放器 mac 破解 编辑:程序博客网 时间:2024/05/21 08:01
#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);        }    }}

0 0
原创粉丝点击