C言語編 標準ライブラリのリファレンス qsort

先頭へ戻る

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引数(elem1) に渡された値が、第2引数(elem2) に渡された値よりも小さいとき 0未満の値を、同じとき 0 を、大きいとき 1以上の値を返すように定義する。比較用関数に渡される実引数は、比較対象の要素へのポインタである。
戻り値
詳細 引数base が指す配列を昇順にソートする。一般に、クイックソート(アルゴリズムとデータ構造編【整列】第6章)によって実装されるが、その保証はない。 配列内の各要素の大小関係の比較のために、比較用関数を外部で定義し、この関数へのポインタを渡す。
注意 比較用関数の中で、ソート対象の配列を書き換えてはならない。
配列の中に等しい要素がある場合に、ソート後の順序関係は規定されていない。
使用例
#include <stdio.h>
#include <stdlib.h>

#define SIZE_OF_ARRAY(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 = SIZE_OF_ARRAY( 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関数は、対象の配列がソート済みであることを要求するため、よくセットで使用される。
解説章 第38章


参考リンク



更新履歴

'2018/4/5 全体的に記述を見直して修正。

'2018/2/22 「サイズ」という表記について表現を統一。 型のサイズ(バイト数)を表しているところは「大きさ」、要素数を表しているところは「要素数」。

'2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

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

Programming Place Plus のトップページへ


はてなブックマーク Pocket に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS
管理者情報 プライバシーポリシー