Programming lesson
Sortieralgorithmen in Java: Selection Sort für Arrays und Objekte (ICS 141 Lab 9)
Lerne, wie du den Selection-Sort-Algorithmus in Java implementierst – für Integer-Arrays und für Employee-Objekte. Mit praxisnahen Beispielen und Trendbezügen zu KI und Gaming.
Einführung in das Sortieren mit Java
Sortieren ist eine der grundlegendsten Operationen in der Programmierung. Egal, ob du eine Bestenliste in einem Spiel erstellst, Daten für eine KI-Anwendung vorbereitest oder einfach nur deine Noten ordnest – Sortieralgorithmen sind unverzichtbar. In diesem Tutorial aus dem Kurs ICS 141 – 02 Lab 9: Sorting lernst du, wie du den Selection Sort in Java implementierst. Du wirst zuerst ein Array von Ganzzahlen sortieren und dann das Verfahren auf Objekte der Klasse Employee anwenden. Dabei nutzen wir den Comparable-Interface, um flexibel nach mehreren Kriterien zu sortieren – ähnlich wie eine KI-App Daten nach Relevanz ordnet.
Teil 1: Sortieren eines Integer-Arrays mit Selection Sort
Was ist Selection Sort?
Selection Sort ist ein einfacher, aber effizienter Sortieralgorithmus. Er sucht wiederholt das kleinste (oder größte) Element aus dem unsortierten Teil des Arrays und tauscht es mit dem ersten Element des unsortierten Teils. Stell dir vor, du sortierst deine Playlist nach Beliebtheit: Du suchst den beliebtesten Song, setzt ihn an die erste Stelle, dann den zweitbeliebtesten an die zweite Stelle und so weiter. Genau so arbeitet Selection Sort.
Schritt-für-Schritt-Anleitung für Integer-Arrays
- Erstelle eine neue Java-Klasse mit dem Namen
SortingDriverund der main-Methode. - Kopiere die selectionSort-Methode aus den Vorlesungsfolien (oder verwende den unten stehenden Code).
- Deklariere und initialisiere ein Integer-Array mit unsortierten Zahlen, z. B.
int[] myNumbers = {42, 7, 19, 3, 88, 1};. - Gib das ursprüngliche Array aus mit einer for-Schleife und Tab-Trennung.
- Rufe selectionSort(myNumbers) auf.
- Gib das sortierte Array erneut aus – es sollte nun aufsteigend sortiert sein.
public static void selectionSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}Absteigend sortieren mit selectionSortDescending
Um absteigend zu sortieren, änderst du die Bedingung in der inneren Schleife: Suche nach dem größten Element statt dem kleinsten. Erstelle dazu eine Kopie der Methode mit dem Namen selectionSortDescending und ersetze arr[j] < arr[minIndex] durch arr[j] > arr[maxIndex]. Rufe diese Methode dann in main auf und gib das Array erneut aus.
public static void selectionSortDescending(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int maxIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] > arr[maxIndex]) {
maxIndex = j;
}
}
int temp = arr[maxIndex];
arr[maxIndex] = arr[i];
arr[i] = temp;
}
}Teil 2: Sortieren eines Employee-Arrays mit Selection Sort
Warum Objekte sortieren?
In der Praxis sortierst du selten nur Zahlen – oft sind es Objekte wie Mitarbeiter, Produkte oder Spieler. Stell dir vor, du entwickelst eine App für ein E-Sports-Turnier: Du musst die Spieler nach Punktzahl und dann nach Namen sortieren. Genau das machst du mit der Employee-Klasse und dem Comparable-Interface.
Employee-Klasse mit compareTo
Erstelle eine Klasse Employee, die Comparable<Employee> implementiert. Die compareTo-Methode vergleicht zuerst nach Name, bei Gleichheit nach Stunden. Das ist ähnlich wie bei einer KI, die Suchergebnisse nach Relevanz und dann nach Datum ordnet.
public class Employee implements Comparable<Employee> {
private String name;
private int hours;
// Konstruktor, Getter, Setter ...
@Override
public int compareTo(Employee other) {
int nameCompare = this.name.compareTo(other.name);
if (nameCompare != 0) {
return nameCompare;
} else {
return Integer.compare(this.hours, other.hours);
}
}
}ObjectSortingDriver – Sortieren von Employee-Arrays
Erstelle eine Klasse ObjectSortingDriver mit einer main-Methode. Kopiere die selectionSort-Methode und passe sie für Employee-Arrays an: Ändere den Parametertyp und verwende compareTo anstelle des Vergleichsoperators.
public static void selectionSort(Employee[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j].compareTo(arr[minIndex]) < 0) {
minIndex = j;
}
}
Employee temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}Erstelle dann ein Array mit 6 Employee-Objekten, gib es vor und nach dem Sortieren aus. Achte darauf, dass die Objekte nach Name (alphabetisch) und bei gleichem Namen nach Stunden (aufsteigend) sortiert werden.
Praktische Tipps und häufige Fehler
- Vergiss nicht, das Array zu initialisieren – sonst bekommst du eine NullPointerException.
- Teste mit verschiedenen Datensätzen, z. B. mit bereits sortierten, umgekehrt sortierten oder Arrays mit Duplikaten.
- Verwende die compareTo-Methode korrekt: Sie gibt einen negativen Wert zurück, wenn das aktuelle Objekt kleiner ist, 0 bei Gleichheit, positiv wenn größer.
- Achte auf die Reihenfolge der Bedingungen – zuerst Name, dann Stunden.
Bezug zu aktuellen Trends
Sortieralgorithmen sind überall: In KI-Chatbots werden Antworten nach Relevanz sortiert. In Gaming-Apps werden Highscores sortiert. In Finanz-Apps werden Transaktionen nach Datum sortiert. Mit Selection Sort verstehst du die Grundlagen, auf denen komplexere Algorithmen wie QuickSort oder MergeSort aufbauen – die wiederum in Machine Learning und Big Data eingesetzt werden.
Zusammenfassung
In diesem Tutorial hast du gelernt, wie man den Selection-Sort-Algorithmus in Java implementiert – sowohl für primitive Datentypen (int) als auch für Objekte (Employee). Du hast gesehen, wie das Comparable-Interface verwendet wird, um flexible Sortierkriterien zu definieren. Dieses Wissen ist die Basis für fortgeschrittene Sortiertechniken und wird dir in vielen Bereichen der Softwareentwicklung helfen – von der Spieleprogrammierung bis zur KI-Entwicklung.
„Sortieren ist nicht nur Ordnung schaffen – es ist der Schlüssel zu effizienten Algorithmen.“ – Unbekannt