Mergesort (aber anders)

luluuxs

Aktives Mitglied
Hallo,
und zwar ist es meine Aufgabe, mergesort umzuändern (aber nur merge() (also ist "a.length/2" eigentlich auch schon falsch, eigentlich müsste dort a.length stehen.)
Ich habe schon ein Programm (vielleicht etwas umständlich geschrieben, welches wenn man z.B. 5 als zufällige Arraygröße eingibt bis zur nächsten Zweierpotenz mit dem höchsten Zufallswert, aber +1) auffült und dies dann auch für die doppelte Länge.
Beispiel:
5 eingegeben, Array von Länge 16 erzeugt. 5 Zahlen random und dann 11 mal die selbe.
Am Ende will ich nur die 5 Zahlen, aber sortiert ausgeben.>
Die merge() Methode soll so umegschrieben werden, dass sich typisch mergesort immer zwei Unterteilungen vergleichen und dann Mischen. Meine Idee:
die Werte vergleiche und in den hinteren Teil (zweite Hälfte nacheinander reinkopieren). Wenn dies sortiert ist, nach vorne kopieren. Dann hat man beispielsweise alle Zweierpäckchen sortiert und ab da sollen es dann Viererpäckchen (Unterteilungen) werden, mein Code funktioniert aber nur für immer zwei aneinanderlegenden zahlen und in der zweiten Hälfte irgendwie gar nicht mehr.
Hat jemand eine Idee wie man das "a.length/2 zu a.length" umändern kann und mein beschriebenes Problem in der merge()-Methode lösen kann?
LG

Java:
public class Mergesort {

    public static int getLength(int n) {
        int length = 2;
        float x = (float)n;
        while (x > 2) {
            x = x / 2;
            length = length * 2;
        }
        return length;
    }

    static void readIn(int[] a, int n) {
        for (int i = 0; i < n; i++) {
            a[i] = (int) (Math.random() * 100) + 1;
        }
        int h = 0;
        for (int i = 0; i < a.length; i++) {
            if (i == 0) {
                h = a[i];
            } else {
                if (a[i] > h) {
                    h = a[i];
                }
            }
        }
        for (int i = n; i < a.length; i++) {
            a[i] = h + 1;
        }
    }

    static void mergesort(int[] a) {
        int runLength = 1;
        while (runLength < a.length/2) {
            for (int startRuns = 0; startRuns < a.length/2; startRuns += 2 * runLength) {
                merge(a, startRuns, runLength);
            }
            runLength *= 2;
        }
    }

    static void merge(int[] a, int startRuns, int runLength) {
        int i = startRuns;
        int j = startRuns + runLength;
        while (i < startRuns + runLength && j < startRuns + 2 * runLength) {
            if (a[i] > a[j]) {
                a[i + a.length / 2] = a[j];
                a[i + a.length / 2 + 1] = a[i];
                a[i] = a[i + a.length/2];
                a[j] = a[i + a.length/2 + 1];
                i++;
            } else {
                a[i + a.length / 2] = a[i];
                a[i + a.length / 2 + 1] = a[j];
                a[i] = a[i + a.length/2];
                a[j] = a[i + a.length/2 + 1];
                i++;
            }
        }
    }

    public static void main (String[]args){
        Out.print("Bitte geben Sie die gewünschte Länge des zufälligen Arrays ein: ");
        int n = In.readInt();
        int[] a = new int[getLength(n) * 2];
        readIn(a, n);
        Out.print("nach Sortierung: ");
        mergesort(a);
        for (int i = 0; i < n; i++) {
            Out.print(a[i] + " ");
        }
    }
}
 

luluuxs

Aktives Mitglied
Also ich glaube, man muss i oder j oder beide anders erhöhen oder die Bedingungen anders setzen und dann sollte es funktionieren, aber ich weiß nicht, wie
Beispiel:

Java:
Bitte geben Sie die gewünschte Länge des zufälligen Arrays ein: 8
nach Sortierung: 13 48 59 80 93 27 56 58

Es sortiert immer nur bis zur Hälfte
Das Problem mit a.length/2 in der mergesort ist gelöst, jetzt brauche ich nur noch Hilfe, um zu wissen, warum er nur bis zur Hälfte sortiert...
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
O Rekursion Mergesort Java Basics - Anfänger-Themen 18
E Methoden 2 Arrays sortieren (MergeSort) Java Basics - Anfänger-Themen 3
H Mergesort aufwand berechen Java Basics - Anfänger-Themen 5
I MergeSort iterativ mit Stacks Java Basics - Anfänger-Themen 13
L Methoden Mergesort methode Java Basics - Anfänger-Themen 4
K MergeSort Stackoverflow Java Basics - Anfänger-Themen 5
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
A Rekursion (anhand von Mergesort) nachvollziehen Java Basics - Anfänger-Themen 4
M Erklärung Code Mergesort Bitte Java Basics - Anfänger-Themen 3
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
M Mergesort Aufgabe große Probleme Java Basics - Anfänger-Themen 9
P Mergesort Probleme Java Basics - Anfänger-Themen 4
I Mergesort mit ArrayList Java Basics - Anfänger-Themen 4
C Mergesort Java Basics - Anfänger-Themen 4
H MergeSort (für Anfänger ) Java Basics - Anfänger-Themen 9
N MergeSort Java Basics - Anfänger-Themen 8
M MergeSort - Zahlen verschwinden Java Basics - Anfänger-Themen 2
P MergeSort mit Liste Java Basics - Anfänger-Themen 4
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
B Methoden Natural Mergesort Java Basics - Anfänger-Themen 2
P Mergesort || 2 SetLists mischen Java Basics - Anfänger-Themen 2
P Mergesort (zyklische Liste) Java Basics - Anfänger-Themen 2
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
N MergeSort mit Liste Java Basics - Anfänger-Themen 8
P Probleme bei codierung von MergeSort Java Basics - Anfänger-Themen 4
M MergeSort - Threads in Anwendung bremsen alles! Java Basics - Anfänger-Themen 4
Houly Mergesort Java Basics - Anfänger-Themen 4
M Mergesort Java Basics - Anfänger-Themen 11
C MergeSort Problem Java Basics - Anfänger-Themen 5
F MergeSort iterativ mit Hilfe von Stack Java Basics - Anfänger-Themen 5
B mergesort/rekursion Java Basics - Anfänger-Themen 9
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
OSchriever Jar-Programm läuft auf Windows aber nicht auf Linux(Raspberri Pi4) Java Basics - Anfänger-Themen 22
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
AGW App programmiert lassen, aber Änderungen vornehmen Java Basics - Anfänger-Themen 13
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Fehler, aber ich weiß nicht warum Java Basics - Anfänger-Themen 3
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
B Java Mail -> Mail senden, ist aber nich in IMAP unter "Gesendet" Java Basics - Anfänger-Themen 3
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
S Programmierung simulieren - aber wie?! Java Basics - Anfänger-Themen 3
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
J Mit OpenJDK entwickeln aber Oracle SE Runtime installieren? Java Basics - Anfänger-Themen 6
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
A Java-Programm läuft bei installierter JDK aber nicht mit JRE? Java Basics - Anfänger-Themen 5
C Statischer Typ aber Variable nicht statisch? Java Basics - Anfänger-Themen 5
J ShortCut erstellen aber wie die dll einbinden Java Basics - Anfänger-Themen 3
I "\n" aus ArrayList enfernen, aber wie?! Java Basics - Anfänger-Themen 4
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
J JavaEditor kompiliert aber startet nicht Java Basics - Anfänger-Themen 1
B Email versand - aber akzeptiert auch falscher Username und Passwort??? Java Basics - Anfänger-Themen 1
O Array benutzen aber WIE? Java Basics - Anfänger-Themen 18
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
A Variabler Rekursionsaufruf, aber wie? Java Basics - Anfänger-Themen 6
N Ausführung gibt keinen Fehler an, Return wird aber nicht ausgegeben Java Basics - Anfänger-Themen 22
M Methoden Zwei Methoden in einem Program laufen lassen...aber wie? Java Basics - Anfänger-Themen 2
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
pkm Best Practice BufferedImage in JPane darstellen - aber wie? Java Basics - Anfänger-Themen 22
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
D int x in System.out.println(), aber wie? Java Basics - Anfänger-Themen 1
J Serialisieren, aber wie? Java Basics - Anfänger-Themen 3
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
snipesss Java-Code gedownloaded, funktioniert aber nicht? Java Basics - Anfänger-Themen 9
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
P Irgendein billiger Fehler aber ich find ihn nicht Java Basics - Anfänger-Themen 16
Thallius Date für DatePicker formatieren aber wie? Java Basics - Anfänger-Themen 9
J Nullpointer aber wo? Java Basics - Anfänger-Themen 12
E Dumme Frage, aber... Java Basics - Anfänger-Themen 15
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
Tacofan Schleife aber nur wie? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben