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 は、比較関数をユーザー定義しなければならないのは一見、不便なように
思えるが逆に言えば、どのような順序に並び替えるにしてもユーザーで設定することが
できるというのは柔軟で汎用的な機能を提供していることになる。