Sortieralgorithmen mit Arrays und Listen in Java: Insertion Sort, Selection Sort und Bubble Sort

  • Beitrag veröffentlicht:10. April 2021
  • Beitrags-Kategorie:Java / Programmierung
  • Beitrags-Kommentare:0 Kommentare
  • Lesedauer:5 min Lesezeit
  • 880 Wörter

In diesem Artikel möchte ich dir gerne einmal die wohl drei gängigsten Sortieralgorithmen zeigen, ein bisschen erklären und sie miteinander vergleichen. Dabei werde ich vor allem den Quelltext für die verschiedenen Anwendungsbeispiele zeigen, da dieser oft hilfreicher ist als Umschreibungen und Erklärungen ;-).

Meistens sind die Implementierungen in Java mit Arrays ein wenig einfacher als mit Listen, da es sich dabei ja auch um statische anstatt dynamische Datenstrukturen handelt. Die Laufzeiten werde ich dir aber auch noch am Ende zeigen.

Insertion Sort

Beim Insertion Sort (oder auch „Sortieren durch Einfügen“) wird grob gesagt immer das erste Element von einer unsortierten Liste herausgenommen und dann an der passenden Stelle in eine sortierte Liste eingefügt.

Die durchschnittliche Laufzeit ist dabei quadratisch, also O(n²) ist die quadrierte Anzahl der zu sortierenden Elemente.

Array

public int[] insertionSort(int[] a) {
	int temp;
	for(int i = 0; i < a.length; i++) {
		for(int j = a.length - 1; j > 0; j--) {
			if(a[j - 1] > a[j]) {
				temp = a[j];
				a[j] = a[j - 1];
				a[j - 1] = temp;
			}
		}
	}
	return a;
}
Code-Sprache: Java (java)

List

public List<Integer> insertionSort(List<Integer> l) {
	List<Integer> sl = new List<Integer>();
	while(!l.isEmpty()){
		l.toFirst();
		sl.toFirst();
		int cur = l.getContent();
		while(sl.hasAccess() && sl.getContent() < cur) {
			sl.next();
		}
		if(sl.hasAccess()) {
			sl.insert(cur);
		} else {
			sl.append(cur);
		}
		l.remove();
	}
	return sl;
}
Code-Sprache: Java (java)

Selection Sort

Beim Selection Sort (oder auch „Sortieren durch Auswählen“) wird immer das kleinste Element der unsortierten Liste ausgewählt und dieses dann an die sortierte Liste angehangen.

Die Laufzeit ist dabei im Schnitt ebenfalls quadratisch, also O(n²) ist die quadrierte Anzahl der zu sortierenden Elemente.

Array

public int[] selectionSort(int[] a) {
	int temp1, temp2;
	for(int i = a.length - 1; i > 0; i--) {
		temp1 = 0;
		for(int j = 1, j <= i; j++) {
			if(a[j] > a[temp1]) {
				temp1 = j;
			}
		}
		temp2 = a[temp1];
		a[temp1] = a[i];
		a[i] = temp2;
	}
	return a;
}
Code-Sprache: Java (java)

List

public List<Integer> selectionSort(List<Integer> l) {
	List<Integer> sl = new List<Integer>();
	sl.toFirst();
	while(!l.isEmpty()){
		l.toFirst();
		int min = l.getContent();
		while(l.hasAccess()) {
			if(l.getContent() < min) {
				min = l.getContent();
			}
			l.next();
		}
		sl.append(min);
		while(l.hasAccess()) {
			if(l.getContent() == min) {
				l.remove();
			}
			l.next();
		}
	}
	return sl;
}
Code-Sprache: Java (java)

Bubble Sort

Beim Bubble Sort (oder auch „Sortieren durch Vertauschen“) wird ein Element immer mit seinem Nachbarelement verglichen und getauscht, wenn es entsprechend größer ist. Das wird so lange wiederholt bis bei einem kompletten Durchlauf der Liste kein Tausch mehr stattgefunden hat.

Die durchschnittliche Laufzeit ist dabei quadratisch, also O(n²) ist die quadrierte Anzahl der zu sortierenden Elemente.

Array

public int[] bubbleSort(int[] a) {
	int temp;
	for(int i = 1; i < a.length; i++) {
		for(int j = 0, j < a.length - i; j++) {
			if(a[j] > a[j + 1]) {
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
	return a;
}
Code-Sprache: Java (java)

List

public List<Integer> bubbleSort(List<Integer> l) {
	int temp1, temp2;
	boolean changed = false;
	do {
		l.toFirst();
		temp1 = l.getContent();
		l.next();
		while(temp1 > l.getContent() && l.hasAccess()) {
			temp2 = l.getContent();
			l.remove();
			l.insert(temp2);
			l.insert(temp1);
			changed = true;
		}
	} while(l.hasAccess() && changed == true)
	return l;
}
Code-Sprache: Java (java)

Ich hoffe, dass ich dir damit ein wenig helfen konnte. Falls du Fehler oder Optimierungspotenzial im Quellcode feststellen solltest, kannst du natürlich gerne einen Kommentar schreiben ;-).

Hinweis: Mit Sternchen (*) markierte Links auf dieser Seite sind Werbelinks. Beim Kauf darüber erhalte ich eine kleine Provision, der Preis bleibt für dich aber gleich. Damit unterstützt du mich, sodass ich weiterhin kostenlosen Inhalt auf diesem Blog anbieten kann ;-).

Hast du Fragen, Anregungen oder einen einfachen Kommentar dazu? Dann poste es hier!

Bitte bedenke, dass alle Kommentare manuell freigeschaltet werden müssen. Das kann teilweise ein bisschen dauern, du kannst dich aber mit der unten aufgeführten Funktion benachrichtigen lassen, wenn er beantwortet wurde. Das heißt auch, dass Beleidigungen, Spam oder pure Werbung keine Chance haben, auf die Website zu kommen. Deine Email-Adresse wird selbstverständlich nicht veröffentlicht. Erforderliche Felder sind mit * oder (erforderlich) markiert.