C 言語における文字列の分類ソート(SORT) のテクニックを紹介する。
最初に古典的な SORT のテクニックではあるが長さの異なる文字列を SORT するのに向いている手法を紹介する。
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 void main(void){
0009.00 int i, len, pass, size;
0010.00 char ary[3][5], name[5], hold[5];
0011.00
0012.00 printf("** TESTSORT **\n");
0013.00 getchar();
0014.00 memset(ary, 0, sizeof(ary));
0015.00 strcpy(ary[0], "A002");
0016.00 strcpy(ary[1], "A003");
0017.00 strcpy(ary[2], "A001");
0018.00
0019.00 size = 4;
0020.00 for(pass = 1; pass<=size-1; pass++){/*for-loop*/
0021.00 for(i = 0; i<=size-2; i++){/*sub-loop*/
0022.00 len = strlen(ary[i]);
0023.00 if(strncmp(ary[i], ary[i+1], len) > 0){/* 交換 */
0024.00 len = strlen(ary[i]);
0025.00 memcpy(hold, ary[i], len);
0026.00 hold[len] = 0x00;
0027.00 len = strlen(ary[i+1]);
0028.00 memcpy(ary[i], ary[i+1], len);
0029.00 ary[i][len] = 0x00;
0030.00 len = strlen(hold);
0031.00 memcpy(ary[i+1], hold, len);
0032.00 ary[i+1][len] = 0x00;
0033.00 }/* 交換 */
0034.00 }/*sub-loop*/
0035.00 }/*for-loop*/
0036.00
0037.00 for(i = 0; i<3; i++){
0038.00 memcpy(name, ary[i], 4);
0039.00 name[4] = 0x00;
0040.00 printf("ary[%d] = %s\n", i, name);
0041.00 }
0042.00 getchar();
【 解説 】
上記で ステートメント 19行目から 35行目で SORT を行っている。
変数 size とは SORT の対象となる項目の数 + 1 の値である。
この SORT のテクニックは文字列を比較しての交換手法で行っているので、
SORT の対象となる各項目の長さが異なっている場合でも有効に働く。
IFS のディレクトリーの一覧表を出力したい場合に、IFS を API で読み取っても実は
アルファベット順には並ばない。
しかしディレクトリーやファイル名がアルファベット順に並んでいないと非常に
見づらくなってしまう。
eStudio の IFS タブをクリックして一覧表示を行うと次の画面のように IFS の一覧が表示され
編集することもできるが、ここには上記の SORT のテクニックを使って
ディレクトリーやファイル名がアルファベット順に並ぶよう設計されている。

