| iMatix home page | << | < | > | >> |
SFL Version 2.11 |
#include "sfllist.h" void list_sort (void *list, NODE_COMPARE comp)
Sorts a list using the "comb-sort" algorithm.
{ int jump_size, i; LIST *base, *swap, *temp; Bool swapped; jump_size = 0; FORLIST (base, * (LIST *) list) jump_size++; swapped = TRUE; while ((jump_size > 1) || swapped) { jump_size = (10 * jump_size + 3) / 13; base = ((LIST *) list)-> next; swap = base; for (i = 0; i < jump_size; i++) swap = swap-> next; swapped = FALSE; while (swap != (LIST *) list) { if ((*comp) (base, swap)) { temp = base-> prev; list unlink (base); list_relink_after (base, swap); list unlink (swap); list_relink_after (swap, temp); temp = base; base = swap; swap = temp; swapped = TRUE; } base = base-> next; swap = swap-> next; } } }
| << | < | > | >> | Copyright © 1996-2000 iMatix Corporation |