qsort

提供: RAD Studio
移動先: 案内検索

stdlib.h:インデックス への移動


ヘッダーファイル

stdlib.h

カテゴリ

メモリと文字列の操作ルーチン

プロトタイプ

void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));

説明

クイックソートアルゴリズムを使ってソートします。

qsort は,「3 つの値の中央値」バージョンのクイックソートアルゴリズムを実装します。qsort は,fcmp が指すユーザー定義の比較関数を繰り返し呼び出して,テーブル内のエントリを整列します。

  • base は,整列するテーブルのベース(0 番めの要素)へのポインタです。
  • nelem は,テーブル内のエントリの数です。
  • width は,テーブル内の各エントリのサイズ(バイト単位)です。

比較関数 fcmp では,_USERENTRY 呼び出し規約を使用する必要があります。

  • fcmp は,elem1 と elem2 の 2 つの引数を受け取ります。これらは,テーブル内のエントリへのポインタです。この比較関数は,示された各項目(*elem1 と *elem2)を比較し,比較の結果に基づいて整数を返します。
  • *elem1 < *elem2 fcmp は負の整数を返します。
  • *elem1 == *elem2 fcmp は 0 を返します
  • *elem1 > *elem2 fcmp は正の整数を返します。

この比較で,小なり記号(<)は,整列後の最終的なシーケンスで,左側の要素が右側の要素より前に置かれることを意味します。同様に,大なり記号(>)は,整列後の最終的なシーケンスで,左側の要素が右側の要素より後に置かれることを意味します。

戻り値

なし。



 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 int sort_function( const void *a, const void *b);
 char list[5][4] = { "cat", "car", "cab", "cap", "can" };
 int main(void)
 {
    int  x;
    qsort((void *)list, 5, sizeof(list[0]), sort_function);
    for (x = 0; x < 5; x++)
       printf("%s\n", list[x]);
    return 0;
 }
 int sort_function( const void *a, const void *b)
 {
    return( strcmp((char *)a,(char *)b) );
 }



移植性



POSIX Win32 ANSI C ANSI C++

+

+

+

+