|
>以下のソースで、Visual C++ Toolkit 2003 の qsort() が
>クイックソートか否か確かめてみたところ、(最大値の)選択ソートの様です。
>よって、qsort() の比較関数で 2 つの値が同じである時
>1 を返せば安定したソートになると思います。
Visual Stduio 6.0〜Visual Stduio 2005 β2のソースコードを簡単に調べましたが,
これら全てのqsort実装は,要素数が8個以下では選択ソートを,9個以上ではクイックソートを使っています。
>よって 23502のソースも少なくともVCTK2003では安定なソートです。
例示のコードを次のように変更しました。
DATA array[]={{1,4},{2,5},{3,6},{4,3},{5,1},{6,1},{7,1},{8,3},{9,1}};
結果は,次のようになります(中間部省略)。
before
1,4
2,5
3,6
4,3
5,1
6,1
7,1
8,3
9,1
after
9,1
5,1
7,1
6,1
4,3
8,3
1,4
2,5
3,6
見てわかるとおり,{5,1}よりも{9,1}が前に来るようになります。
つまり,ソートは不安定です。
|