データのソート

最終更新日:2004-06-29.

今回は、データのソートについてちょっと。

では、ソースにしてみましょう。
+------------------------------------------------------------+
/* filename=no026-1.c */
/* include */
#include <stdio.h>
#include <string.h>
/* 関数プロトタイプ宣言 */
void sort_i(int *, int);
void sort_s(char **, int);
/* main */
int main( )
{
int i, maxnum=5;
int data_i[5];
char data_s[5][8];
char *data_p[5];
/* data入力 */
data_i[0]=8;
data_i[1]=16;
data_i[2]=32;
data_i[3]=64;
data_i[4]=128;
strcpy(&data_s[0][0],"BOOK");
strcpy(&data_s[1][0],"PEN");
strcpy(&data_s[2][0],"DESK");
strcpy(&data_s[3][0],"HOT");
strcpy(&data_s[4][0],"ZOO");
/* 配列をポインタで */
for( i=0; i<maxnum; i++ ){
data_p[i]=&data_s[i][0];
}
/* sort */
sort_i(&data_i[0], maxnum);
sort_s(&data_p[0], maxnum);
return 0;/* 終了 */
}
/* sort - int */
void sort_i(int *data_i, int maxnum)
{
int i, j, bak;
printf("以下の%d個の数値を大きい順にソートします。\n", maxnum);
for( i=0; i<maxnum; i++ ){
printf("%d ", *(data_i+i));
}
putchar('\n');
/* maxnum個のデータを処理する */
for( i=0; i<(maxnum-1); i++ ){
for( j=(i+1); j<maxnum; j++ ){
/* 値を比べる */
if( (*(data_i+i))<(*(data_i+j)) ){
bak=(*(data_i+i));
(*(data_i+i))=(*(data_i+j));
(*(data_i+j))=bak;
}
}
}
printf("ソートの結果です。\n", maxnum);
for( i=0; i<maxnum; i++ ){
printf("%d ", *(data_i+i));
}
putchar('\n');
return;/* 戻る */
}
/* sort - (char *) */
void sort_s(char **data_p, int maxnum)
{
int i, j;
char bak[8];
printf("以下の%d個の文字列を降順にソートします。\n", maxnum);
for( i=0; i<maxnum; i++ ){
printf("%s ", data_p[i]);
}
putchar('\n');
/* maxnum個のデータを処理する */
for( i=0; i<(maxnum-1); i++ ){
for( j=(i+1); j<maxnum; j++ ){
/* 文字列の大小比較 */
if( strcmp(data_p[i], data_p[j])<0 ){
strcpy(bak, data_p[i]);
strcpy(data_p[i], data_p[j]);
strcpy(data_p[j], bak);
}
}
}
printf("ソートの結果です。\n", maxnum);
for( i=0; i<maxnum; i++ ){
printf("%s ", data_p[i]);
}
putchar('\n');
return;/* 戻る */
}
+------------------------------------------------------------+

上記をコンパイルして実行すると、以下のように表示されました。
以下の5個の数値を大きい順にソートします。
8 16 32 64 128
ソートの結果です。
128 64 32 16 8
以下の5個の文字列を降順にソートします。
BOOK PEN DESK HOT ZOO
ソートの結果です。
ZOO PEN HOT DESK BOOK

戻る