単連結リストの整列 #90 符号による整列は不要

前回の二つの例の結果から見えてくるように、
整数値の各桁を構成する数字にその整数値の符号を付けたもので順位を比較するようにした場合、
最後の符号による比較は不要になる。
それより前の段階で、負数よりも非負数の方が順位が上になるように自然に定義されているからである。
したがって、符号のみによる比較の機能を持つ順位定義関数は必要なく、

...snip
static int issup(cintelem_t p, cintelem_t q, void *base)
{
    int ip = intelem_get_val(p), iq = intelem_get_val(q);
    ip = ip >= 0 ? ip / (int)base % 10 : - (-ip) / (int)base % 10;
    iq = iq >= 0 ? iq / (int)base % 10 : - (-iq) / (int)base % 10;
    return ip > iq;
}
...snip
int main(void)
{
    int i;
    intlist_t list = intlist_new();
    srand(100);
    for (i = 0; i < 20; i++) intlist_add_first(list, (int)(rand() / (RAND_MAX + 1.0) * 1999) - 999);
    print(list);
    intlist_sort(list, issup, (void *)1);
    print(list);
    intlist_sort(list, issup, (void *)10);
    print(list);
    intlist_sort(list, issup, (void *)100);
    print(list);
    return 0;
}

のようなコードでいい。

-521  357 -937 -770 -205 -296    8  195  983  454 -656  416 -896  507 -313  495   20 -669 -925 -977
-669 -937 -977 -296 -656 -896 -205 -925 -313 -521 -770   20  983  454  195  495  416  357  507    8
-296 -896 -977 -770 -669 -656 -937 -925 -521 -313 -205  507    8  416   20  454  357  983  195  495
-977 -937 -925 -896 -770 -669 -656 -521 -313 -296 -205    8   20  195  357  416  454  495  507  983

一段分、処理が少なくて済む。