4965707f6ae71039fc2243e0a464a533bc2eaf3b
InsertionSort.md
| ... | ... | @@ -0,0 +1,52 @@ |
| 1 | +# Insertion Sort |
|
| 2 | + |
|
| 3 | +## Einführung |
|
| 4 | +Insertion Sort (Einfügesortierung) ist ein einfacher Sortieralgorithmus, der ähnlich wie das Sortieren von Spielkarten funktioniert. Er baut das sortierte Array schrittweise auf, indem er jedes neue Element an die richtige Position in der bereits sortierten Teilsequenz einfügt. |
|
| 5 | + |
|
| 6 | +## Funktionsweise |
|
| 7 | +1. **Initialisierung**: Das erste Element wird als sortiert betrachtet. |
|
| 8 | +2. **Iteration**: Das nächste Element wird mit den bereits sortierten Elementen verglichen. |
|
| 9 | +3. **Vergleich und Verschiebung**: Größere Elemente werden nach rechts verschoben, um Platz für das aktuelle Element zu schaffen. |
|
| 10 | +4. **Einfügen**: Das aktuelle Element wird an der gefundenen Position eingefügt. |
|
| 11 | +5. **Wiederholung**: Dieser Prozess wird für alle Elemente wiederholt, bis das gesamte Array sortiert ist. |
|
| 12 | + |
|
| 13 | + |
|
| 14 | + |
|
| 15 | +Hinweis: Bei jedem Durchgang wird die rote Zahl als gezogene Zahl angesehen und an der richtigen Stelle eingefügt (sic!) |
|
| 16 | + |
|
| 17 | +## Komplexität |
|
| 18 | +- **Zeitkomplexität (Best Case)**: O(n) – wenn das Array bereits sortiert ist. |
|
| 19 | +- **Zeitkomplexität (Average/Worst Case)**: O(n<sup>2</sup>) – bei zufälliger oder umgekehrter Reihenfolge. |
|
| 20 | +- **Speicherkomplexität**: O(1) – es wird kein zusätzlicher Speicher benötigt (in-place). |
|
| 21 | + |
|
| 22 | +## Java-Implementierung |
|
| 23 | + |
|
| 24 | +```java |
|
| 25 | + |
|
| 26 | +public class InsertionSort { |
|
| 27 | + public static void insertionSort(int[] arr) { |
|
| 28 | + for (int i = 1; i < arr.length; i++) { |
|
| 29 | + int key = arr[i]; |
|
| 30 | + int j = i - 1; |
|
| 31 | + |
|
| 32 | + // Verschiebe Elemente, die größer als key sind, nach rechts |
|
| 33 | + while (j >= 0 && arr[j] > key) { |
|
| 34 | + arr[j + 1] = arr[j]; |
|
| 35 | + j--; |
|
| 36 | + } |
|
| 37 | + |
|
| 38 | + // Füge key an der richtigen Position ein |
|
| 39 | + arr[j + 1] = key; |
|
| 40 | + } |
|
| 41 | + } |
|
| 42 | + |
|
| 43 | + // Beispielaufruf |
|
| 44 | + public static void main(String[] args) { |
|
| 45 | + int[] data = {12, 11, 13, 5, 6}; |
|
| 46 | + System.out.println("Unsortiert: " + java.util.Arrays.toString(data)); |
|
| 47 | + insertionSort(data); |
|
| 48 | + System.out.println("Sortiert: " + java.util.Arrays.toString(data)); |
|
| 49 | + } |
|
| 50 | +} |
|
| 51 | + |
|
| 52 | +``` |
SelectionSort.md
| ... | ... | @@ -0,0 +1,53 @@ |
| 1 | +# Selection Sort |
|
| 2 | + |
|
| 3 | +## Einführung |
|
| 4 | +Selection Sort (Auswahlsortierung) ist ein einfacher, vergleichsbasierter Sortieralgorithmus, der ein Array in einen sortierten und einen unsortierten Teil unterteilt. In jeder Iteration wird das kleinste Element aus dem unsortierten Teil ausgewählt und mit dem ersten Element dieses Teils getauscht. |
|
| 5 | + |
|
| 6 | +## Funktionsweise |
|
| 7 | +1. **Initialisierung**: Der sortierte Teil ist am Anfang leer. |
|
| 8 | +2. **Suche Minimum**: Finde das kleinste Element im unsortierten Teil. |
|
| 9 | +3. **Tauschen**: Vertausche es mit dem ersten Element des unsortierten Teils. |
|
| 10 | +4. **Verschieben**: Erweitere den sortierten Teil um eine Position. |
|
| 11 | +5. **Wiederholung**: Wiederhole, bis der gesamte Array sortiert ist. |
|
| 12 | + |
|
| 13 | + |
|
| 14 | + |
|
| 15 | +Hinweis: Der aktuell minimale Wert (Selection) wird direkt an die richtige Stelle getauscht (swapping), nicht Stück-für-Stück wie beim Nachbarvergleich (bubble). |
|
| 16 | + |
|
| 17 | +## Komplexität |
|
| 18 | +- **Zeitkomplexität**: O(n<sup>2</sup>) im besten, durchschnittlichen und schlechtesten Fall. |
|
| 19 | +- **Speicherkomplexität**: O(1) – arbeitet in-place. |
|
| 20 | +- **Stabilität**: Instabil (kann die relative Reihenfolge gleicher Elemente ändern). |
|
| 21 | + |
|
| 22 | +## Java-Implementierung |
|
| 23 | + |
|
| 24 | +```java |
|
| 25 | +public class SelectionSort { |
|
| 26 | + public static void selectionSort(int[] arr) { |
|
| 27 | + int n = arr.length; |
|
| 28 | + |
|
| 29 | + for (int i = 0; i < n - 1; i++) { |
|
| 30 | + int minIdx = i; |
|
| 31 | + |
|
| 32 | + // Finde das kleinste Element im unsortierten Teil |
|
| 33 | + for (int j = i + 1; j < n; j++) { |
|
| 34 | + if (arr[j] < arr[minIdx]) { |
|
| 35 | + minIdx = j; |
|
| 36 | + } |
|
| 37 | + } |
|
| 38 | + |
|
| 39 | + // Tausche das gefundene Minimum mit dem ersten Element |
|
| 40 | + int temp = arr[minIdx]; |
|
| 41 | + arr[minIdx] = arr[i]; |
|
| 42 | + arr[i] = temp; |
|
| 43 | + } |
|
| 44 | + } |
|
| 45 | + |
|
| 46 | + // Beispielaufruf |
|
| 47 | + public static void main(String[] args) { |
|
| 48 | + int[] data = {64, 25, 12, 22, 11}; |
|
| 49 | + System.out.println("Unsortiert: " + java.util.Arrays.toString(data)); |
|
| 50 | + selectionSort(data); |
|
| 51 | + System.out.println("Sortiert: " + java.util.Arrays.toString(data)); |
|
| 52 | + } |
|
| 53 | +} |
|
| ... | ... | \ No newline at end of file |
insert.png
| ... | ... | Binary files /dev/null and b/insert.png differ |
selection.png
| ... | ... | Binary files /dev/null and b/selection.png differ |