#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int cmp(const void *a, const void *b)
{
        const long long *aa = a, *bb = b;

        printf("   cmp: comparing %lld with %lld (%d)\n", *aa, *bb, (*aa < *bb));
        return *aa < *bb;
}

void print_samples(long long *samples, size_t nelem) {
    for (size_t i=0; i<nelem; ++i) {
        printf("%02lu: %lld\n", i, samples[i]);
    }
}

int main() {
    long long samples[] = {
        100126,
        100193,
        100143,
        100131,
        100129,
        100129,
        100128,
        100128,
        100125,
        100125
    };
    long long *samples_ptr;
    const size_t s_number = sizeof(samples)/sizeof(samples[0]);

    samples_ptr = malloc(sizeof(long long) * s_number);
    memcpy(samples_ptr, samples, s_number * sizeof(long long));

    printf("Before sorting:\n");
    print_samples(samples_ptr, s_number);
    printf("\nSamples number: %lu, width: %lu\n", s_number, sizeof(samples_ptr[0]));
    qsort(samples_ptr, s_number, sizeof(samples_ptr[0]), cmp);
    printf("\n\nAfter sorting:\n");
    print_samples(samples_ptr, s_number);

    printf("Before sorting:\n");
    print_samples(samples, s_number);
    printf("\nSamples number: %lu, width: %lu\n", s_number, sizeof(samples[0]));
    qsort(samples, s_number, sizeof(samples[0]), cmp);
    printf("\n\nAfter sorting:\n");
    print_samples(samples, s_number);

    return 0;
}