#99 Article 1040 Posted at 1995/12/17 02:26:20 by R.Cat (MAP5121) [SAHOU.3]

Subject: Re: プログラミング作法・お題3 /1029

----- sort.c -----
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc,char *argv[])
{
    int *chain;
    int i,j,prev;
    
    if(argc == 1) {
        fprintf(stderr,"sort string1 strin2 ...\n");
        exit(1);
    }
/* 初期化 */
    chain = (int *)malloc(sizeof(int)*argc+2);
    if(chain == NULL) {
        fprintf(stderr," メモリが確保できません。\n");
        exit(2);
    }
    *(chain) = 0;
/* ソート本体 */
    for(i = 1;i < argc;i++) {
        for(prev = 0,j = *chain;;prev = j,j = *(chain+j)) {
            if(strcmp(argv[j],argv[i]) > 0 || j == 0) {
                *(chain+prev) = i;
                *(chain+i) = j;
                break;
            }
        }
    }
/* 表示して終了 */
    for(i = *chain;i != 0;i = *(chain+i))
        printf("%s\n",argv[i]);
    return 0;
}
-----
 というわけで、あいかわらず何のひねりもないプログラムです。一応 qsort()
を使わないで書いてみたけんですど。
 比較して挿入していくアルゴリズムです。なんて言うんでしたっけ?それと、
strcmp() はどの処理系でも同じ動作をするでしょうか。一致しているかどうか
にしか使った事がないもので、その他については自信無いです。(ちなみに 98
の TC を使用しています。)
 for の所でよけいな {} がついていますけど、私の場合これをなくすと修正す
るときにバグの原因になるので、ちょっとごちゃごちゃするときにはつけるよう
にしています。

R.Cat(HT)
p.s. 1 行の Perl がインパクトあった (^_^;)