>>229

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

struct pair { const char *s; int n; };

int cmp(const void *a, const void *b)
{
    const struct pair *aa = a;
    const struct pair *bb = b;
    return strcmp(aa->s, bb->s);
}

size_t make_suffixarray(const char *str, int *array)
{
    size_t i;
    size_t len = strlen(str);
    struct pair *holder = malloc(sizeof(struct pair) * len);
    
    for (i = 0; i < len; ++i) {
        holder[i].s = str + i;
        holder[i].n = i;
    }
    qsort(holder, len, sizeof(struct pair), cmp);
    for (i = 0; i < len; ++i)
        array[i] = holder[i].n;
    free(holder);
    return len;
}