#include<stdio.h> //HeapSort implementation
#include<string.h>
#include<stdlib.h>
#define MAXLEN 100001
int len; //堆中的实际元素的个数
void SiftDown(int *a, int index, int n)
{
int i, j;
i = index;
j = 2 * i;
a[0] = a[i]; //监视哨
while (j <= n)
{
if (j + 1 <= n&&a[j + 1] < a[j])
j = j + 1;
if (a[0] > a[j])
{
a[i] = a[j];
i = j;
j = 2 * i;
}
else
break;
}
a[i] = a[0];
}
void SiftUp(int *a, int index, int n)
{
int i, j;
i = index;
j = i / 2;
a[0] = a[i];
while (j > 0)
{
if (a[j] > a[0])
{
a[i] = a[j];
i = j;
j = i / 2;
}
else
break;
}
a[i] = a[0];
}
void Insert(int *a, int key)
{
a[++len] = key;
SiftUp(a, len, len);
}
void DeleteMin(int *a)
{
printf("%d\n", a[1]);
a[1] = a[len--];
SiftDown(a, 1, len);
}
int main()
{
int testnum, op, opnum, key;
int a[MAXLEN];
scanf("%d", &testnum);
while (testnum--)
{
len = 0;
scanf("%d", &opnum);
while (opnum--)
{
scanf("%d", &op);
switch (op)
{
case 1:
scanf("%d", &key);
Insert(a, key);
break;
case 2:
DeleteMin(a);
break;
}
}
}
return 0;
}
DSOJ Heapsort implementation(堆排序)
最新推荐文章于 2024-02-19 12:48:53 发布