私のマシンの C ライブラリはqsort、heapsort、 、および を提供し、 man ページmergesortで次のように述べています。
および関数はqsort()、qsort_r()パーティション交換ソートの変形である CAR Hoare の「クイックソート」アルゴリズムの実装です。特に、DE Knuth のAlgorithm Qを参照してください。クイックソートにはO(n lg n)平均時間がかかります。この実装では、中央値選択を使用して、O(n 2 )の最悪の動作を回避します。
このheapsort()関数は、選択ソートの変形である JWJ William の「ヒープソート」アルゴリズムの実装です。特に、DE Knuth のアルゴリズム Hを参照してください。ヒープソートには、最悪のケースでO(n lg n)の時間がかかります。唯一の利点qsort()は、追加のメモリをほとんど使用しないことです。whileqsort()はメモリを割り当てませんが、再帰を使用して実装されます。
この関数には sizeバイトmergesort()の追加メモリが必要です。nel * widthスペースが限られている場合にのみ使用してください。このmergesort()関数は、既存の順序を持つデータ用に最適化されています。最悪の場合の時間はO(n lg n)です。その最良のケースはO(n)です。
通常、qsort()は よりも速く、 は よりもmergesort()高速ですheapsort()。メモリの可用性とデータ内の既存の順序により、これが正しくない場合があります。
実装の具体的な詳細を確認したい場合は、オープン ソースの C ライブラリがたくさんあります。
「システム X がアルゴリズム Y を選択した理由」に関しては、意味のある答えを出すのはかなり難しい質問です。ドキュメントで理論的根拠を見つけることができなかった場合は、設計者に直接尋ねる必要があります。