Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:sorting:mergesort:start [29.02.2024 09:58] – [Zentrale Teilaufgabe: Merge] Marco Kuemmel | faecher:informatik:oberstufe:algorithmen:sorting:mergesort:start [13.02.2025 07:22] (aktuell) – Frank Schiebel | ||
---|---|---|---|
Zeile 10: | Zeile 10: | ||
===== Grundsätzliche Funktionsweise ===== | ===== Grundsätzliche Funktionsweise ===== | ||
- | Mergesort ist eine Divide-and-Conquer Algorithmus, | + | Mergesort ist eine [[faecher: |
* **Teile** das Array in zwei Hälften (Divide). | * **Teile** das Array in zwei Hälften (Divide). | ||
Zeile 205: | Zeile 205: | ||
* Bewerte die Implementation in Hinsicht auf Ressourcenverbrauch und Effizienz | * Bewerte die Implementation in Hinsicht auf Ressourcenverbrauch und Effizienz | ||
+ | ++++ Lösungsvorschlag | | ||
+ | |||
+ | <code java> | ||
+ | // Mergesort naiv | ||
+ | public String[] msort(String[] a) { | ||
+ | // Implementiere hier gemäß des Pseudocodes im Wiki | ||
+ | if(a.length == 1) { | ||
+ | return a; | ||
+ | } | ||
+ | |||
+ | int mitte = a.length/2; | ||
+ | // Dieser Schritt ist aufwändig! | ||
+ | // Man muss Arrays erzeugen und alle Elemente | ||
+ | // in die neuen Teilarrays hineinkopieren. | ||
+ | // das ist O(n) bei jedem Aufruf :( | ||
+ | String[] ta1 = new String[mitte]; | ||
+ | String[] ta2 = new String[a.length-mitte]; | ||
+ | for(int i=0; i<mitte; i++) { | ||
+ | ta1[i]=a[i]; | ||
+ | } | ||
+ | for(int i=mitte; i< | ||
+ | ta2[i-mitte] = a[i]; | ||
+ | } | ||
+ | return merge(msort(ta1), | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
===== Arrayerzeugung ist teuer ===== | ===== Arrayerzeugung ist teuer ===== | ||
Zeile 212: | Zeile 239: | ||
Wir befassen uns zunächst nochmal mit dem Merge-Vorgang und implementieren mit unseren Kenntnissen vom ersten Versuch die Methode | Wir befassen uns zunächst nochmal mit dem Merge-Vorgang und implementieren mit unseren Kenntnissen vom ersten Versuch die Methode | ||
+ | <code java> | ||
public void merge(String[] a, String[] speicher, int min, int mitte, int max) | public void merge(String[] a, String[] speicher, int min, int mitte, int max) | ||
- | | + | </ |
in der Klasse '' | in der Klasse '' | ||