summaryrefslogtreecommitdiffhomepage
path: root/examples/priority.c
blob: 722d316496e4d9993cfe9b16314467db4fec101a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

#include <stdio.h>
#include <time.h>
#include <stc/cvec.h>
#include <stc/cpqueue.h>
#include <stc/cmap.h>
#include <stc/crandom.h>

using_cvec(i, int64_t);
using_cpqueue(i, cvec_i, >); // min-heap (increasing values)

int main() {
    size_t N = 10000000;
    crand_rng64_t pcg = crand_rng64_init(time(NULL));
    crand_uniform_i64_t dist = crand_uniform_i64_init(0, N * 10);
    cpqueue_i heap = cpqueue_i_init();

    // Push ten million random numbers to priority queue
    for (int i=0; i<N; ++i)
        cpqueue_i_push(&heap, crand_uniform_i64(&pcg, &dist));

    // push some negative numbers too.
    c_push_items(&heap, cpqueue_i, {-231, -32, -873, -4, -343});

    for (int i=0; i<N; ++i)
        cpqueue_i_push(&heap, crand_uniform_i64(&pcg, &dist));


    // Extract the hundred smallest.
    for (int i=0; i<100; ++i) {
        printf("%zd ", *cpqueue_i_top(&heap));
        cpqueue_i_pop(&heap);
    }
    cpqueue_i_del(&heap);
}