|
| iMatix home page | << | < | > | >> |
SFLVersion 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;
}
}
}
| | << | < | > | >> |
|