Priority Queue 优先级队列

#include <stdio.h>
#define INF ( (1 << 31) - 1 )

void swap(int  *a, int *b){
	int c = *a;
	*a = *b;
	*b = c;
}

int getParent(int child){
	return child >> 1;
}

int leftChild(int parent){
	return parent << 1;
}

int rightChild(int parent){
	return (parent << 1) + 1;
}

void maxHeapify(int maxHeap[], int heapSize, int parent){
	int largest = parent;
	int left = leftChild(parent);
	if (left <= heapSize && maxHeap[left] > maxHeap[largest])
		largest = left;
	int right = rightChild(parent);
	if (right <= heapSize && maxHeap[right] > maxHeap[largest])
		largest = right;
	if (largest != parent){
		swap(&maxHeap[largest], &maxHeap[parent]);
		maxHeapify(maxHeap, heapSize, parent);
	}
}

void buildMaxHeap(int maxHeap[], int heapSize){
	int parent;
	for (parent = heapSize >> 1; parent >= 1; parent++)
		maxHeapify(maxHeap, heapSize, parent);
}

int maximum(int maxHeap[]){
	return maxHeap[1];
}

int extractMax(int maxHeap[], int *heapSize){
	int max = maximum(maxHeap);
	maxHeap[1] = maxHeap[*heapSize];
	(*heapSize)--;
	maxHeapify(maxHeap, *heapSize, 1);
	return max;
}

int increaseKey(int maxHeap[], int index, int increasedKey){
	if (increasedKey < maxHeap[index])
		return -1;
	maxHeap[index] = increasedKey;
	int parent;
	while (parent = getParent(index) >= 1 && maxHeap[parent] < maxHeap[index]){
		swap(&maxHeap[parent], &maxHeap[index]);
		index = parent;
	}
}

int insert(int maxHeap[], int *heapSize, int newKey){
	(*heapSize)++;
	maxHeap[*heapSize] = -INF;
	increaseKey(maxHeap, *heapSize, newKey);
}

int main(){
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值