sortierte Arrayteile zusammenfügen

El Hadji

Bekanntes Mitglied
Servus Community,
So eine aller letzte Frage. Kurze Problemstellung habe eine unsortierte Array und soll sie in 4 ungefähr gleich große Arrays teilen und diese parallel sortieren und danach zusammenfügen. Parallel sortieren klappt super nur das zusammenfügen ist das Problem.
6403bb-1548536157.jpg

Die vorgebene Klasse MergeSort, hilft mir auch nicht wirklich weiter hier die vorgegebene:
Code:
package parsort.geg;


public class MergeSort {
   
    private int[] b = new int[0];
   
    /*
     * Sortiert das Teil-Array a[start,...,ende-1] aufsteigend.
     */
    public void sort(int[] a, int start, int ende) {
        if(ende - start > 1) {
            int m = (start+ende)/2;   // start < m < ende
            sort(a,start,m);
            sort(a,m,ende);
            merge(a,start,m,ende);
        }
       
    }

    /*
     * Voraussetzung: a[start,...,m-1] und a[m,...,ende-1] sind sortiert.
     * Ergebnis: Die Elemente in a[start,...,ende-1] sind so umgeordnet,
     *           dass sie aufsteigend sortiert sind.
     */
    public final void merge(int[] a, int start, int m, int ende) {
        if(b.length < a.length) {
            b = new int[a.length];
        }
        merge(a,b,start,m,ende);
    }

    private void merge(int[] a, int[] b, int start, int m, int ende) {
        int i=start;
        int j=m;
        for(int k=start; k<ende; k++) {
            if(i < m && (j >= ende || a[i] < a[j])) {
                b[k] = a[i];
                i++;
            } else {
                b[k] = a[j];
                j++;
            }
        }
        for(int k=start; k<ende; k++) a[k] = b[k];
    }
   
   
}

Dann hab ich natürlich eine Unterklasse von Thread geschrieben:
Code:
package parsort;

import java.util.*;

public class SortThread extends Thread
{
   private int [] a;
   private int [] b;
   private int start;
   private int ende;
   private String s;
  
    public SortThread(int [] a, int start, int ende, String s)
    {
        this.s = s;
        this.a = a;
        b = new int[ende-start];
        for(int i = 0; i < b.length; i++)
        {
            b[i] = a[start];
            start++;
        }
     
     
    }
   
   
   
    public int [] sort()
    {
       Arrays.sort(b);
       return b;
      
       /*
       for(int i = 0; i < b.length; i++)
       {
           System.out.println(b[i]+ " " + s);
        }
        */
    }

  
    public void run()
    {
       sort();
    }
}

und meine eigene ParallelSortklasse die bis aufs merge stimmt, leider komm ich da nicht weiter:
Code:
package parsort;

import parsort.geg.MergeSort;
import java.util.*;


public class ParallelMergeSort extends MergeSort
{
    // instance variables - replace the example below with your own
    private int x;

    /**
     * Constructor for objects of class ParallelMergeSort
     */
    public ParallelMergeSort()
    {
      
    }

   
    public void sort(int [] a)
    {
        if(a.length >= 4)
        {
        int b = a.length/4;
       
        SortThread thread1 = new SortThread(a,0,b, " 1ster");
        SortThread thread2 = new SortThread(a,b,b*2, " 2ter");
        SortThread thread3 = new SortThread(a,b*2,b*3, " 3ter");
        SortThread thread4 = new SortThread(a,(b*3),a.length, " 4ter");
     
     
      thread1.start();
      thread2.start();
      thread3.start();
      thread4.start();
     
      try {
          thread1.join();
          thread2.join();
          thread3.join();
          thread4.join();
       
          } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
       
        merge(a,thread1.sort(),thread2.sort(),thread3.sort(),thread4.sort());
}
     
     else Arrays.sort(a);
  
       
     
    }
   
    void merge(int[] a, int[] b1, int[] b2, int [] b3, int [] b4)
    {
        int i1 = 0;
        int i2 = 0;
        for(int i=0; i<a.length; i++) {
            if(i2 == b2.length || i1 < b1.length && b1[i1] < b2[i2]) {
                a[i] = b1[i1];
                i1++;
            } else {
                a[i] = b2[i2];
                i2++;
            }
        }
    }
}


Sorry für den ewig langen Tex, aber es ist definitv mein letzter Post, vielleicht beruhigt das ;-)
mfg El Hadji
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Zwei sortierte Subarrays mit gleicher Länge zusammenfügen Java Basics - Anfänger-Themen 2
B sortierte Liste Java Basics - Anfänger-Themen 4
A Sortierte Listen Java Basics - Anfänger-Themen 4
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
K 2 sortierte Arrays zu einem Arrays zusammenführen Java Basics - Anfänger-Themen 13
B Sortierte Liste implementieren Java Basics - Anfänger-Themen 3
M sortierte Ausgabe eines .txt Dokuments Java Basics - Anfänger-Themen 1
H 2 sortierte arrays in ein array Java Basics - Anfänger-Themen 2
M Sortierte Tabelle in Datei schreiben Java Basics - Anfänger-Themen 5
P Sortierte Liste Java Basics - Anfänger-Themen 29
Povlsen84 Datentypen Große, sortierte, schnelle Datenstruktur Java Basics - Anfänger-Themen 9
L Problem mit Iterator bzw. Sortierte Liste Java Basics - Anfänger-Themen 14
S Sortierte LinkedList nach Variablen durchsuchen und nicht nach INDEX Java Basics - Anfänger-Themen 6
G Zwei sortierte Arrays zusammenführen Java Basics - Anfänger-Themen 13
G Sortierte Daten Java Basics - Anfänger-Themen 7
M Sortierte Liste / Map Java Basics - Anfänger-Themen 8
M Sortierte Liste nach Wert durchsuchen Java Basics - Anfänger-Themen 8
T Sortierte Ausgabe in der Shell Java Basics - Anfänger-Themen 4
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
C Wie 2 Arrays zusammenfügen und sortieren? Java Basics - Anfänger-Themen 11
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
A Arrays zusammenfügen Java Basics - Anfänger-Themen 3
C Arrays zusammenfügen mit abwechselnden Werten Java Basics - Anfänger-Themen 3
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
W 2 JPanels in 2Klasse in einem JFrame zusammenfügen Java Basics - Anfänger-Themen 12
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
C Beliebige Anzahl Arrays zusammenfügen Java Basics - Anfänger-Themen 5
N Methoden Zwei Zahlen nach dem Reißverschluss-*‐Prinzip zusammenfügen und ausgeben. Java Basics - Anfänger-Themen 4
B FileWriter und JFileChooser zusammenfügen Java Basics - Anfänger-Themen 3
W zusammenfügen von zwei Klassen Java Basics - Anfänger-Themen 9
I Xml dateien zusammenfügen Java Basics - Anfänger-Themen 12
B mehrere Abfragen zusammenfügen Java Basics - Anfänger-Themen 3
D Arrays zusammenfügen und in einem Array ausgeben Java Basics - Anfänger-Themen 3
P Arrays abwechslend zusammenfügen Java Basics - Anfänger-Themen 31
B Zusammenfügen von zwei Arraylisten Java Basics - Anfänger-Themen 11
P Matrizen zusammenfügen Java Basics - Anfänger-Themen 8
FreddyStepp Bilder zusammenfügen Java Basics - Anfänger-Themen 7
A 2 arrays zusammenfügen Java Basics - Anfänger-Themen 5
T Einzelne Ziffer zusammenfügen (ohne Strings oder Arrays) Java Basics - Anfänger-Themen 2
G int zusammenfügen NICHT addieren Java Basics - Anfänger-Themen 9
M Graphen zusammenfügen Java Basics - Anfänger-Themen 2
M String und Integer zusammenfügen? Java Basics - Anfänger-Themen 4
G Feld bzw. Arrays erweitern oder zusammenfügen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben