kazmax - Linux で自宅サーバー

qsort - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. 準拠
  6. 注意
  7. 関連項目

名前

qsort - 配列を並べ変える

書式

#include <stdlib.h>

void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));

説明

qsort () 関数は、 大きさ sizenmemb 個の要素をもつ配列を並べ変える。 base 引数は配列の先頭へのポインタである。

compar をポインタとする比較関数によって、 配列の中身は昇順 (値の大きいものほど後に並ぶ順番) に並べられる。 比較関数の引数は比較されるふたつのオブジェクトのポインタである。

比較関数は、第一引数が第二引数に対して、 1) 小さい、2) 等しい、3) 大きいのそれぞれに応じて、 1) ゼロより小さい整数、2) ゼロ、3) ゼロより大きい整数の いずれかを返さなければならない。 ふたつの要素の比較結果が等しいとき、 並べ変えた後の配列では、ふたつの順序は定義されていない。

返り値

qsort () は値を返さない。

準拠

SVr4, 4.3BSD, C99.

注意

compar 引数に使用するのに適しているライブラリルーチンとして、 strcmp ()(下記参照), alphasort (), versionsort ()がある。

使用例については、   bsearch (3) にある例を参照すること。
以下のプログラムに別の使用例を示す。このプログラムは、 コマンドライン引き数で指定された文字列の並び換えを行う。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>


static int cmpstringp(const void *p1, const void *p2) { /* The actual arguments to this function are "pointers to pointers to char", but strcmp() arguments are "pointers to char", hence the following cast plus dereference */
return strcmp(* (char * const *) p1, * (char * const *) p2); }
int main(int argc, char *argv[]) { int j;
assert(argc > 1);
qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);
for (j = 1; j < argc; j++) puts(argv[j]); exit(EXIT_SUCCESS); }

関連項目

  sort (1),  alphasort (3),  strcmp (3),  versionsort (3)