堆的实现与堆排序及TopK问题的C语言代码
下面是详细的堆实现,包括向上调整、向下调整算法,以及堆排序和解决TopK问题的完整C语言示例代码。
1. 堆的实现
首先,定义堆的数据结构:
#include <stdio.h>
#include <stdlib.h>
#define MAX_HEAP_SIZE 100
typedef struct {
int data[MAX_HEAP_SIZE];
int size;
} Heap;
Heap* createHeap() {
Heap* heap = (Heap*)malloc(sizeof(Heap));
heap->size = 0;
return heap;
}
2. 向上调整算法
void heapifyUp(Heap* heap, int index) {
int parentIndex = (index - 1) / 2;
if (index > 0 && heap->data[index] > heap->data[parentIndex]) {
// 交换当前节点和父节点
int temp = heap->data[index];
heap->data[index] = heap->data[parentIndex];
heap->data[parentIndex] = temp;
// 递归向上调整
heapifyUp(heap, parentIndex);
}
}
3. 向下调整算法
void heapifyDown(Heap* heap, int