CS_LEVEL_8_SOLUTION - OnlyCook/abitur-elite-code GitHub Wiki
public class Lager
{
private List<Paket> pakete;
public void SortiereNachGewicht()
{
for (int i = 0; i < pakete.Count - 1; i++)
{
for (int j = 0; j < pakete.Count - i - 1; j++)
{
if (pakete[j].GetGewicht() > pakete[j + 1].GetGewicht())
{
Paket temp = pakete[j];
pakete[j] = pakete[j + 1];
pakete[j + 1] = temp;
}
}
}
}
}Bubble Sort vergleicht immer zwei benachbarte Elemente und tauscht sie, wenn sie in der falschen Reihenfolge sind. Dieses Prinzip wird so oft wiederholt, bis die gesamte Liste sortiert ist. Nach jedem Durchlauf der äußeren Schleife „blubbert" das aktuell größte Element ans Ende – daher der Name.
for (int i = 0; i < pakete.Count - 1; i++)i zählt, wie viele Durchläufe bereits abgeschlossen sind. Nach dem ersten Durchlauf steht das schwerste Paket bereits an letzter Stelle und muss nicht mehr verglichen werden. Nach dem zweiten das zweitschwerste – und so weiter. Deshalb läuft die äußere Schleife nur bis Count - 1: beim letzten verbleibenden Element gibt es keinen Nachbarn mehr, mit dem man vergleichen könnte.
for (int j = 0; j < pakete.Count - i - 1; j++)j ist der Index des aktuell betrachteten Pakets. Verglichen wird immer pakete[j] mit pakete[j + 1]. Die Obergrenze ist Count - i - 1, weil die letzten i Elemente bereits sortiert sind und nicht mehr angefasst werden müssen. Das - 1 stellt zusätzlich sicher, dass j + 1 nie aus der Liste herauszeigt.
if (pakete[j].GetGewicht() > pakete[j + 1].GetGewicht())
{
Paket temp = pakete[j];
pakete[j] = pakete[j + 1];
pakete[j + 1] = temp;
}Ist das linke Paket schwerer als das rechte, werden die beiden getauscht. Da man den Wert von pakete[j] durch die Zuweisung überschreiben würde, braucht man eine Hilfsvariable temp, die den ursprünglichen Wert zwischenspeichert – klassisches Drei-Schritte-Tausch-Muster:
-
temp← linkes Element sichern - linkes Element ← rechtes Element
- rechtes Element ←
temp
Liste mit drei Paketen: [8.0, 3.5, 6.0]
Durchlauf i = 0 (j läuft bis 1):
| j | Vergleich | Tausch? | Liste danach |
|---|---|---|---|
| 0 | 8.0 > 3.5 → ✅ | ja | [3.5, 8.0, 6.0] |
| 1 | 8.0 > 6.0 → ✅ | ja | [3.5, 6.0, 8.0] |
Durchlauf i = 1 (j läuft bis 0):
| j | Vergleich | Tausch? | Liste danach |
|---|---|---|---|
| 0 | 3.5 > 6.0 → ❌ | nein | [3.5, 6.0, 8.0] |
Ergebnis: [3.5, 6.0, 8.0] – aufsteigend sortiert. ✅