70 lines
1.2 KiB
C
70 lines
1.2 KiB
C
/**
|
|
* heapsort.c
|
|
*
|
|
* Creation Date: 25/03/2019
|
|
*
|
|
* Authors:
|
|
* Leonardo Vencovsky (https://github.com/LeoVen)
|
|
*
|
|
*/
|
|
#include <stdio.h>
|
|
|
|
#include "cmc/cor/core.h"
|
|
#include "cmc/utl/futils.h"
|
|
|
|
#define PFX h
|
|
#define SNAME heap
|
|
#define V int
|
|
#define CMC_EXT_ITER
|
|
#include "cmc/heap.h"
|
|
|
|
int main()
|
|
{
|
|
struct heap *h = h_new(32, CMC_MIN_HEAP, &(struct heap_fval){ .cmp = cmc_i32_cmp });
|
|
|
|
for (int i = 1000; i > 0; i--)
|
|
{
|
|
if (!h_insert(h, i))
|
|
{
|
|
printf("Failed to insert: %s", cmc_flags_to_str[h_flag(h)]);
|
|
return h_flag(h);
|
|
}
|
|
}
|
|
|
|
size_t S = h_count(h);
|
|
|
|
int *buff = malloc(sizeof(int) * S);
|
|
|
|
int index = 0;
|
|
while (!h_empty(h))
|
|
{
|
|
int tmp = h_peek(h);
|
|
|
|
if (h_flag(h) == CMC_FLAG_OK)
|
|
{
|
|
buff[index++] = tmp;
|
|
h_remove(h);
|
|
}
|
|
else
|
|
{
|
|
printf("Heap peek failed: %s", cmc_flags_to_str[h_flag(h)]);
|
|
return h_flag(h);
|
|
}
|
|
}
|
|
|
|
for (size_t i = 0; i < S; i++)
|
|
{
|
|
if (i == 0)
|
|
printf("[ %d, ", buff[i]);
|
|
else if (i == S - 1)
|
|
printf("%d ]\n", buff[i]);
|
|
else
|
|
printf("%d, ", buff[i]);
|
|
}
|
|
|
|
free(buff);
|
|
h_free(h);
|
|
|
|
return 0;
|
|
}
|