X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=lib%2Flist.c;h=57d24ba48ae7a9b605ce4d56d2c6bd9aff788975;hb=8c59ccf495b2aa94469fe25d4e1efe224f3a9aea;hp=8cba3f3b86855e3eb3bae4991d1f777cec2a125d;hpb=24692371a191df65509a88bd23ac22cbbdf17dc3;p=cascardo%2Fdeclara.git diff --git a/lib/list.c b/lib/list.c index 8cba3f3..57d24ba 100644 --- a/lib/list.c +++ b/lib/list.c @@ -128,3 +128,22 @@ int list_size(struct list *list) { return list->len; } + +/* Selection sort */ +int list_sort(struct list *l, sort_function_t *fn) +{ + int i, j; + for (i = 0; i < l->len; i++) { + int max = i; + void *tmp; + /* Find index of max value */ + for (j = i; j < l->len; j++) { + if (fn(l->items[j].val, l->items[max].val) < 0) + max = j; + } + /* Swap items */ + tmp = l->items[max].val; + l->items[max].val = l->items[i].val; + l->items[i].val = tmp; + } +}