Ein Doppel-Axel in C (1) -- qsort, bsearch, lsearch
Ein Doppel-Axel in C (1) -- qsort, bsearch, lsearch
Ein Doppel-Axel in C (1) -- qsort, bsearch, lsearch
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
$ q < data $ q -s < data $ q -n < data<br />
0 str<strong>in</strong>g 10 5 Str<strong>in</strong>g 20 0 str<strong>in</strong>g 10<br />
1 str<strong>in</strong>g 20 4 Str<strong>in</strong>g 10 2 str<strong>in</strong>g 10<br />
2 str<strong>in</strong>g 10 0 str<strong>in</strong>g 10 4 Str<strong>in</strong>g 10<br />
3 str<strong>in</strong>g 20 3 str<strong>in</strong>g 20 3 str<strong>in</strong>g 20<br />
4 Str<strong>in</strong>g 10 1 str<strong>in</strong>g 20 5 Str<strong>in</strong>g 20<br />
5 Str<strong>in</strong>g 20 2 str<strong>in</strong>g 10 1 str<strong>in</strong>g 20<br />
L<strong>in</strong>ks wird die <strong>E<strong>in</strong></strong>gabe unsortiert ausgegeben. Rechts wird numerisch, <strong>in</strong> der Mitte<br />
werden die Namen sortiert. Man sieht <strong>in</strong> beiden Beispielen, daß die<br />
<strong>E<strong>in</strong></strong>gabereihenfolge ‘‘gleicher’’ Elemente zerstört werden kann.<br />
$ q -= < data $ q -sn < data $ q -nn < data<br />
4 Str<strong>in</strong>g 10 0 str<strong>in</strong>g 10 0 str<strong>in</strong>g 10<br />
5 Str<strong>in</strong>g 20 4 Str<strong>in</strong>g 10 2 str<strong>in</strong>g 10<br />
2 str<strong>in</strong>g 10 2 str<strong>in</strong>g 10 4 Str<strong>in</strong>g 10<br />
0 str<strong>in</strong>g 10 3 str<strong>in</strong>g 20 3 str<strong>in</strong>g 20<br />
1 str<strong>in</strong>g 20 5 Str<strong>in</strong>g 20 1 str<strong>in</strong>g 20<br />
3 str<strong>in</strong>g 20 1 str<strong>in</strong>g 20 5 Str<strong>in</strong>g 20<br />
L<strong>in</strong>ks wird mit cmp() nach Namen und sekundär nach Zahlen sortiert. Das ist völlig<br />
anders, als wenn (wie <strong>in</strong> der Mitte) erst e<strong>in</strong>mal ganz nach Namen und dann das<br />
Resultat nach Zahlen sortiert wird. Im mittleren Beispiel wird eigentlich die mittlere<br />
Ausgabe von vorher nochmals neu nach der .number-Komponente sortiert. Man<br />
sieht auch hier sehr deutlich, daß qsor t() <strong>in</strong>stabil ist.<br />
Im rechten Beispiel wird zweimal numerisch sortiert, also die vorhergehende<br />
rechte Ausgabe nochmals neu nach dem gleichen Sortierkriterium. Man sieht, daß<br />
sogar bei e<strong>in</strong>er ursprünglich sortierten Tabelle noch zwei <strong>E<strong>in</strong></strong>träge vertauscht