2011年5月10日火曜日

qsort を用いたソート

C言語の標準関数である qsort() 関数を用いたソートの例です。

qsort の引数:
void qsort(void * base, size_t nmemb, size_t size, int (* compar)(const void *, const void *) );
void* base : データ元となるデータを指し示すポインタ用配列
size_t nmemb: 配列の数
size_t size: データの型のサイズ(sizeof で指定)
int (*compar)(const void*, const void*)): ソートで用いる大小比較用関数
qsort() の関数内では、データ元となるデータもしくは配列をそれぞれポインタで指し示し、ポインタが指し示すデータの順番を入れ替えていくことになります。

例題では、
文字列のデータを指し示すポインタ用配列:char* c_table[3];
数値列のデータを指し示すポインタ用配列: int* i_table[5];
のそれぞれのアドレスを
c_table[0] = a; → 配列aの先頭アドレス
i_table[i] = &idata[i]; → idata[]配列のi番目のデータのアドレス

というように指定し、qsort() 関数が指し示されたアドレスの順番を入れ替えていくことになります。

qsort() で指定する大小規定用の関数 compare() は、文字列、数値列用それぞれに準備しています。
compare() の関数は、2つのデータの大小を正負の値を使って表現するような関数を自分で規定するものですが、今回は、単に文字列の長さと、データの大きさで指定しています。

実行結果

0 件のコメント:

コメントを投稿