| iMatix home page
| << | < | > | >>
SFL Logo SFL
Version 2.11

 

list_sort

#include "sfllist.h"
void list_sort (void *list, NODE_COMPARE comp)

Synopsis

Sorts a list using the "comb-sort" algorithm.

Source Code - (sfllist.c)

{
    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;
          }
      }
}

| << | < | > | >> iMatix Copyright © 1996-2000 iMatix Corporation