C言語編 リファレンス

標準ライブラリ 「Q」

「Q」で始まる標準ライブラリ関数及び、その他の定義です。

qsort関数

概要 配列をソートする。
必要なヘッダファイル stdlib.h
形式 void qsort(void* base, size_t count, size_t size, int (*compar)(const void* elem1, const void* elem2));
引数 base ソート対象の配列のアドレス。
count ソート対象の配列の要素数。
size 要素1つのサイズ。
compar 要素の大小関係を比較する関数へのポインタ。
この比較関数は、第1引数に渡された値が第2引数に渡された値よりも小さいとき 0未満の値を、同じとき 0 を、大きいとき 1以上の値を返すように定義する。 この場合、昇順にソートされる。降順にソートしたければ、小さい場合と大きい場合との値を逆転させれば良い。
比較関数に渡される実引数は、比較対象の要素へのポインタである。
戻り値
詳細 配列base をソートする。要素同士の大小関係を比較するために、外部に関数を定義し、その関数へのポインタを渡す必要がある。
一般に、クイックソートによって実装されているが、その保証は特にない。
注意 比較関数の中で、引数に渡されたポインタを実際の要素の型のポインタにキャストした後、間接参照によって、要素の書き換えを行ってはならない。
使用例
#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE(array)    sizeof(array)/sizeof(array[0])

int compareInt(const void* a, const void* b);

int main(void)
{
	int table[] = { 66, 85, 70, 92, 61, 89 };
	size_t size = ARRAY_SIZE( table );
	size_t i;


	qsort( table, size, sizeof(int), compareInt );

	for( i = 0; i < size; ++i ){
		printf( "%d ", table[i] );
	}
	printf( "\n" );

	return 0;
}

/*
	int型による順序比較。

	引数:
		a:	比較する要素。
		b:	比較する要素。
	戻り値:
		a の方が小さいとき負数、
		b の方が小さいとき 0 より大きい値、
		a と b が同じときは 0、
		 が返される。
*/
int compareInt(const void* a, const void* b)
{
	int aNum = *(int*)a;
	int bNum = *(int*)b;

	if( aNum < bNum ){
		return -1;
	}
	else if( aNum > bNum ){
		return 1;
	}
	return 0;
}

実行結果:

61 66 70 85 89 92
関連 標準サーチ関数として bsearch関数が存在する。 bsearch関数は、対象配列がソート済みであることを要求するため、よくセットで使用される。
本編で解説している章 第37章

参考リンク

更新履歴

'2010/5/4 qsort関数の説明を追加。

'2010/1/23 新規作成。



リファレンスのトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ