QSORT
Section: C Library Functions (3)
索引
jman
BSD mandoc
索引
名称
qsort , heapsort , mergesort
- ソート関数
索引
ライブラリ
Lb libc
索引
書式
Fd #include <stdlib.h>
Ft void
Fn qsort void *base size_t nmemb size_t size int (*compar)(const void *, const void *)
Ft int
Fn heapsort void *base size_t nmemb size_t size int (*compar)(const void *, const void *)
Ft int
Fn mergesort void *base size_t nmemb size_t size int (*compar)(const void *, const void *)
索引
解説
Fn qsort
関数は、パーティション交換ソートの修正版、ようするにクイックソートです。
Fn heapsort
関数は、選択ソートの修正版です。
Fn mergesort
関数は、既に並んでいる箇所のあるデータをソートする、
指数検索によるマージソートの修正版です。
Fn qsort
関数と
Fn heapsort
関数は、
Fa base
によって初期メンバが指されている
Fa nmemb
オブジェクトの配列をソートします。
各オブジェクトのサイズは、
Fa size
で指定します。
Fn mergesort
も同じように動作しますが、
Fa size
は
``sizeof(void *) / 2''
より大きくなければなりません。
配列
Fa base
の内容は、
Fa compar
が指す比較関数に従って昇順でソートされます。
この関数では、比較するオブジェクトを指す、2 つの引数が必要です。
比較関数は、最初の引数が次の引数より小さい場合は 0 より小さい整数、
等しい場合は 0、大きい場合は 0 より大きい整数を戻す必要があります。
Fn qsort
関数と
Fn heapsort
関数は不安定です。
つまり 2 つのメンバが等しい場合、ソート済み配列内での順序は不定になります。
Fn mergesort
関数は安定です。
Fn qsort
関数は、パーティション交換ソートの一種である、C.A.R. Hoare の
``クイックソート'' アルゴリズムを実装しています。
とくに D.E. Knuth のアルゴリズム Q を参照してください。
Fn qsort
には、平均で
O N lg N
の時間がかかります。
この実装では、メジアン選択を使用して、O N**2 という
最悪なケースの動作を回避します。
Fn heapsort
関数は、選択ソートの一種である、J.W.J. William の
``ヒープソート'' アルゴリズムを実装しています。
とくに D.E. Knuth のアルゴリズム H を参照してください。
Fn heapsort
には、最悪のケースで
O N lg N
の時間がかかります。
メモリをほとんど余分に使用しないという点のみが
Fn qsort
より優れています。
一方、
Fn qsort
はメモリを割り当てませんが、再帰を使用して実装されています。
Fn mergesort
関数では、
Fa nmemb *
Fa size
バイトのメモリが余分に必要となります。
スペースに余裕がある場合のみに使用してください。
Fn mergesort
は、既に並んでいる箇所のあるデータを扱うよう最適化されています。
最悪のケースの時間は O N lg N で、最善のケースは O N です。
通常は、
Fn heapsort
より
Fn mergesort
の方が速く、
Fn mergesort
より
Fn qsort
の方が高速です。
使用できるメモリ量や既に並んでいるデータ量により、この状況は変化します。
索引
戻り値
Fn qsort
関数は値を戻しません。
Rv -std heapsort mergesort
索引
エラー
Fn heapsort
関数と
Fn mergesort
関数は、以下のような場合にエラーとなります。
- Bq Er EINVAL
-
Fa size
引数が 0 であるか、
Fn mergesort
の
Fa size
引数が
``sizeof void * / 2''
より小さい場合。
- Bq Er ENOMEM
-
Fn heapsort
か
Fn mergesort
がメモリを割り当てられなかった場合。
索引
互換性
旧バージョンの
Fn qsort
では、比較ルーチンが
Fn qsort 3
を呼び出すことはできませんでした。
現在は呼び出せます。
索引
関連項目
sort(1),
radixsort(3)
-
Hoare, C.A.R.
1962
"Quicksort"
"The Computer Journal"
5:1
pp. 10-15
-
Williams, J.W.J
1964
"Heapsort"
"Communications of the ACM"
7:1
pp. 347-348
-
Knuth, D.E.
1968
"The Art of Computer Programming"
Vol. 3
"Sorting and Searching"
pp. 114-123, 145-149
-
Mcilroy, P.M.
"Optimistic Sorting and Information Theoretic Complexity"
"Fourth Annual ACM-SIAM Symposium on Discrete Algorithms"
January 1992
-
Bentley, J.L.
"Engineering a Sort Function"
"bentley@research.att.com"
January 1992
索引
規格
Fn qsort
関数は、
St -isoC
に適合しています。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 互換性
-
- 関連項目
-
- 規格
-
Time: 07:07:04 GMT, January 12, 2009