Pakete nach Gewicht ordnen
AFB I–IIEine Paketstation soll eingelieferte Pakete nach ihrem Gewicht ordnen, damit schwere Pakete unten im Regal landen. Die Gewichte (in g) stehen in der Reihung gewicht. Sortiert wird aufsteigend mit Selectionsort.
- Beschreiben Sie das Vorgehen von Selectionsort in eigenen Worten.
- Stellen Sie den Ablauf für die Reihung
gewichtin einer Tracetabelle dar: Nummer der Runde,i,minPosund Inhalt der Reihung nach der Runde. - Geben Sie für diesen Ablauf die Anzahl der Vergleiche von Reihungselementen und die Anzahl der Runden an, in denen zwei Elemente tatsächlich ihre Plätze tauschen.
- Der Betreiber hofft, dass die Station schneller sortiert, wenn die Pakete schon grob nach Gewicht eingeliefert werden. Begründen Sie, dass Selectionsort dadurch keinen einzigen Vergleich einspart.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
i gesucht.Hinweis zu Aufgabe c)
minPos ≠ i als echte Vertauschung.Hinweis zu Aufgabe d)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Die Reihung besteht aus einem sortierten Teil (links, anfangs leer) und einem unsortierten Teil. In jeder Runde wird im unsortierten Teil das kleinste Element gesucht (Position merken) und mit dem ersten Element des unsortierten Teils vertauscht. Damit wächst der sortierte Teil um ein Element. Nach \(n-1\) Runden steht auch das letzte Element richtig.
Erwartungshorizont zu Aufgabe b)
| Runde | i | minPos | gewicht danach |
|---|---|---|---|
| 1 | 0 | 4 | 290 | 350 1240 505 820 760 |
| 2 | 1 | 1 | 290 350 | 1240 505 820 760 |
| 3 | 2 | 3 | 290 350 505 | 1240 820 760 |
| 4 | 3 | 5 | 290 350 505 760 | 820 1240 |
| 5 | 4 | 4 | 290 350 505 760 820 1240 |
Runde 2 und 5: Das Minimum steht bereits an Position i.
Erwartungshorizont zu Aufgabe c)
Vergleiche: \(5+4+3+2+1=15=\frac{6\cdot5}{2}\). Echte Vertauschungen: 3 (Runden 1, 3, 4); der Code führt den Tausch zwar 5-mal aus, in Runde 2 und 5 aber mit dem Element selbst.
Erwartungshorizont zu Aufgabe d)
Die äußere Schleife läuft immer von 0 bis \(n-2\), die innere immer von \(i+1\) bis \(n-1\). Keine der Grenzen hängt von den Werten ab, und es gibt keinen vorzeitigen Abbruch. Auch wenn das Minimum schon vorn steht, muss es mit allen restlichen Elementen verglichen werden, um sicher zu sein. Also stets \(\frac{n(n-1)}{2}\) Vergleiche; nur die Zahl der echten Vertauschungen kann sinken.
Eine Rangliste mit maxSort
AFB II–IIIEin Sportverein verwaltet die Punktzahlen seiner Bogenschützen in einer Reihung, zum Beispiel punkte = {58, 71, 64, 90, 33, 45}. Eine Vereinssoftware verwendet das folgende Verfahren:
- Analysieren Sie das Verfahren
maxSorthinsichtlich der Wirkung einer Runde; notieren Sie dazu die Reihungpunktenach den ersten beiden Runden. - Implementieren Sie
maxSortals Java-Methodepublic static void maxSort(int[] a). - Die Software braucht für 5000 Einträge 0,2 s. Schätzen Sie ab, wie lange sie für 10 000 Einträge braucht, wenn die Laufzeit proportional zur Anzahl der Vergleiche ist.
- Bei gleicher Punktzahl soll der Schütze vorn bleiben, der zuerst eingetragen wurde. Ein Mitglied schlägt vor, in der Bedingung
>durch>=zu ersetzen. Erörtern Sie, obmaxSortmit oder ohne diese Änderung die Reihenfolge gleicher Punktzahlen erhält.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
for (int ende = a.length - 1; ende > 0; ende--).Hinweis zu Aufgabe c)
Hinweis zu Aufgabe d)
(A, 7) (B, 7) (C, 3) und (A, 5) (B, 3) (C, 3), jeweils mit > und >=.Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
In jeder Runde wird im unsortierten Bereich a[0] bis a[ende] die Position des größten Elements bestimmt und dieses mit a[ende] getauscht. Der sortierte Teil wächst damit von rechts; es entsteht ebenfalls eine aufsteigende Sortierung (Selectionsort mit Maximum).
| Runde | ende | maxPos | punkte danach |
|---|---|---|---|
| 1 | 5 | 3 | 58 71 64 45 33 | 90 |
| 2 | 4 | 1 | 58 33 64 45 | 71 90 |
Erwartungshorizont zu Aufgabe b)
public static void maxSort(int[] a) {
for (int ende = a.length - 1; ende > 0; ende--) {
int maxPos = 0;
for (int j = 1; j <= ende; j++) {
if (a[j] > a[maxPos]) {
maxPos = j;
}
}
int hilf = a[ende];
a[ende] = a[maxPos];
a[maxPos] = hilf;
}
}Bewertet werden: richtige Schleifengrenzen (insbesondere j <= ende), Position statt Wert merken, Tausch mit Hilfsvariable.
Erwartungshorizont zu Aufgabe c)
Vergleiche \(V(n)=\frac{n(n-1)}{2}\): \(V(5000)=12\,497\,500\), \(V(10\,000)=49\,995\,000\). Quotient \(\approx4{,}0\). Erwartete Laufzeit \(\approx4\cdot0{,}2\,\text{s}=0{,}8\,\text{s}\). Doppelte Datenmenge bedeutet etwa vierfache Laufzeit.
Erwartungshorizont zu Aufgabe d)
Mit > wird bei Gleichstand das erste Maximum nach hinten getauscht: (A,7)(B,7)(C,3) → (C,3)(B,7)(A,7) — A stand vorn, steht nun hinter B. Mit >= wird das letzte Maximum gewählt; das hilft in manchen Fällen, aber nicht allgemein: (A,5)(B,3)(C,3) → Runde 1 tauscht A mit C: (C,3)(B,3)(A,5), Runde 2 wählt B (letztes Maximum) und lässt es stehen — C steht jetzt vor B. Ursache ist der Tausch über große Entfernungen, der unbeteiligte Elemente an gleichen Werten vorbeibewegt. Fazit: Das Verfahren ist in keiner der beiden Varianten stabil; für die Vereinsanforderung ist ein stabiles Verfahren wie Insertionsort zu wählen.
