17.11.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!