C言語において SORT と言えば代表的であるのが qsort による SORT である。
しかし実用の面において文字列の SORT を行いたい場合でも
ほとんどの qsort のサンプルは main 関数からの文字列の入力であり、
しかも 1文字ずつを SORT するというものである。
これでは実際の記述においてほとんど役には立たない。
そこで一般的に通じるような qsort の使い方のサンプルをここで紹介する。
0001.00 #include <stdio.h> 0002.00 #include <stdlib.h> 0003.00 #include <string.h> 0004.00 0005.00 #define TRUE 0 0006.00 #define FALSE -1 0007.00 0008.00 int compare(const void *arg1, const void *arg2); 0009.00 void main(void){ 0010.00 int i; 0011.00 char ary[3][4], name[5]; 0012.00 0013.00 printf("** TESTSORT **\n"); 0014.00 getchar(); 0015.00 memset(ary, 0, sizeof(ary)); 0016.00 strcpy(ary[0], "A002"); 0017.00 strcpy(ary[1], "A003"); 0018.00 strcpy(ary[2], "A001"); 0019.00 qsort((char*)ary, 3, 4, compare); 0020.00 for(i = 0; i<3; i++){ 0021.00 memcpy(name, ary[i], 4); 0022.00 name[4] = 0x00; 0023.00 printf("ary[%d] = %s\n", i, name); 0024.00 } 0025.00 getchar(); 0026.00 } 0027.00 0028.00 int compare(const void *arg1, const void *arg2) 0029.00 { 0030.00 return (strcmp((char*)arg1, (char*)arg2)); 0031.00 }
【 解説 】
一般的な他のサンプル事例に比べて compare 関数の型が異なっているはずである。
qsort であれば
qsort((char*)ary, 3, 4, compare);
のわずか一行だけで SORT を行うことができる。
3項目の4バイトの文字列を SORT している。
なお qsort を使う場合の文字列の配列は
char ary[3][4]
のように NULL の分は考慮に入れずに 4バイトの文字列を SORT するのであれば 配列も
4バイト長で定義しておくことが必要である。
これは qsort が文字列全体をひとつして SORT するからである。
また qsort は、比較関数をユーザー定義しなければならないのは一見、不便なように
思えるが逆に言えば、どのような順序に並び替えるにしてもユーザーで設定することが
できるというのは柔軟で汎用的な機能を提供していることになる。