您的位置:首页 > 编程语言 > C语言/C++

算法导论-优先级队列-C语言

2014-09-07 15:51 369 查看
#define MIN_INT (-65535)
int heapSize;
void exchange(int array[],int a, int b);

void maxHeapify(int array[], int i);
int main()
{
printf("Hello world!\n");
return 0;
}

void maxHeapify(int array[], int i)
{
int l = i * 2 + 1;
int r = (i + 1) * 2;
int largest = i;

if(l < heapSize && array[l] > array[i])
{
largest = l;
}
if(r < heapSize && array[r] > array[largest])
{
largest = r;
}
if(largest != i)
{
exchange(array,largest,i);
heapHeapify(array,largest,heapSize);
}
}
int heapMaxMum(int array[])
{
return array[0];
}
int heapExtractMax(int array[])
{
int max;

if(heapSize < 1)
{
return -1;//Error heap overflow
}
max = array[0];
array[0] = array[heapSize - 1];
maxHeapify(array,0,heapSize - 1);

return max;
}
void heapIncreaseKey(int array[],int i,int key)
{
int parent;

if(array[i] < key)
{
return;//Error,key must be larger than array[i]
}
array[i] = key;
parent = (i - 1) / 2;
while(i > 0 && array[parent] < key)
{
exchange(array,parent,i);
i = parent;
parent = (i - 1) / 2;
}
}
void maxHeapInsert(int array[],int key)
{
array[heapSize] = MIN_INT;
heapIncreaseKey(array,heapSize,key);
++heapSize;
}
// exchange content of position a and b in array
void exchange(int array[],int a, int b)
{
int temp;
temp = array[a];
array[a] = array[b];
array[b] = temp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息