Objektarrays sortieren

Status
Nicht offen für weitere Antworten.

Cheefrocker

Bekanntes Mitglied
Hallo zusammen!

Ich habe ein Array von Objekten. Wie kann ich dieses Array am schnellsten Sortieren? Sortiert wird nach einer Variable die sich im Objekt befindet.

Besten dank für alle!


Kann ich hier quicksort einsetzen??


Folgender Code scheint nicht richtig zu klappen und dauert viel zu lange wenn er mal durchläuft.





Code:
/*
 * QuickSorter.java
 *
 * Created on 19. September 2007, 09:34
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package universal;
import EDA_LN.dataobject;

//Sortier 
public class QuickSorter2
{
    private Object[] a;
    private int n;

    public void sort(Object[] a)
    {
        this.a=a;
        n=a.length;
        quicksort(0, n-1);
    }
    public void output()
    {
        for(int i=0;i<a.length;i++)
            System.out.println(((dataobject)a[i]).getmitgliedsnr());
    }

    private void quicksort (int lo, int hi)
    {
        int i=lo;
        int j=hi;
        Object x=a[(lo+hi)/2];

        //  Aufteilung
        while (i<=j)
        {    
            while (Integer.parseInt(((dataobject)a[i]).getmitgliedsnr())<Integer.parseInt(((dataobject)x).getmitgliedsnr())) i++; 
            while (Integer.parseInt(((dataobject)a[i]).getmitgliedsnr())>Integer.parseInt(((dataobject)x).getmitgliedsnr())) j--;
            if (i<=j)
            {
                exchange(i, j);
                i++; j--;
            }
        }

        // Rekursion
        if (lo<j) quicksort(lo, j);
        if (i<hi) quicksort(i, hi);
    }

    private void exchange(int i, int j)
    {
        Object t=a[i];
        a[i]=a[j];
        a[j]=t;
    }

}    // end class QuickSorter
 
M

maki

Gast
Am schnellsten + einfachsten wäre:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator)
Code:
Arrays.sort( deinArray, deinComperator );
 

Cheefrocker

Bekanntes Mitglied
Ist er denn Schneller als folgende Variante

Code:
public class FileSorter {
  
   //Sortiert die Collection nach String, gibt die sortierte collection als Array zurück
  public static Object[] sort(Collection Input) 
   { 
    Object[] output = Input.toArray();            
                  
            for(int i = output.length - 1; i > 0; i--) 
            { 
                 for(int j = 0; j < i; j++) 
                 { 
                     if((((dataobject)output[j]).getmitgliedsnr().compareTo(((dataobject)output[j + 1]).getmitgliedsnr())) > 0)
                     { 
                         Object neu =output[j];
                         output[j] = output[j+1];
                         output[j+1] = neu;
                     } 
                 } 
             } 
            
     return output;
}   
}
 
S

SlaterB

Gast
wer sagt das?
doch, Quicksort ist auch hier (was immer das ist, im Grunde ja überall) möglich
 
G

Gast

Gast
KÖnnte mir einer von euch ein lauffähigen Quicksort als Quellcode geben?
 
G

Gast

Gast
es ist nicht schlecht, aber brauch ein möglichst schneller algorithmus!

Muss mehr als 10000 Werte untereinander vergleichen! Bei Bubblesort dauert es etwas lange.
 

tfa

Top Contributor
Arrays.sort() verwendet ein modifiziertes Mergesort mit garantierter Laufzeit O(n)=n*log(n). Schneller
geht es nicht.
Quicksort kann -- wenn man Pech hat -- zu O(n)=n² entarten.
 

Professor Chaos

Aktives Mitglied
tfa hat gesagt.:
Arrays.sort() verwendet ein modifiziertes Mergesort mit garantierter Laufzeit O(n)=n*log(n). Schneller
geht es nicht.
Quicksort kann -- wenn man Pech hat -- zu O(n)=n² entarten.
Ich weiß, dass ich mich mit diesem Post unbeliebt mache.^^
Ich selbst mag auch keine Besserwisser, ich hoffe aber dennoch, dass ihr gnädig mit mir umgeht. Ich bin nämlich leider ein Perfektionist und muss daher einfach den folgenden Kommentar loswerden:

"O(n)=n*log(n)" macht genauso wenig Sinn wie "O(n)=n²". Was du, tfa, meintest, war O(f)=n*log(n), bzw. O(f(n))=n*log(n). (Okay, ganz formal gesehen müsste man Element-aus-Zeichen verwenden, aber das wäre viel zu überformal.) Was wohl noch einfacher (da weniger formal) wäre, wäre auf das Istgleich gänzlich zu verzichten, also nur die Klasse O(f) anzugeben (siehe unten, "noch einfacher"). Ich störe mich nur daran, dass auf der einen Seite O(n) steht und auf der anderen Seite eine Funktion, die Definitiv nicht in die Klasse O(n) gehört.

Richtig wäre also:
Mergesort hat garantierte Laufzeit von O(f)=n*log(n), und
Quicksort hat WorstCase Laufzeit O(f)=n².

oder noch einfacher ausgedrückt:

Mergesort hat garantierte Laufzeit von O(n*log(n)), und
Quicksort hat WorstCase Laufzeit O(n²).


Sorry für diese Kleinlichkeit...
 

SchonWiederFred

Bekanntes Mitglied
Cheefrocker hat gesagt.:
Code:
while (Integer.parseInt(((dataobject)a[i]).getmitgliedsnr())<Integer.parseInt(((dataobject)x).getmitgliedsnr())) i++; 
while (Integer.parseInt(((dataobject)a[i]).getmitgliedsnr())>Integer.parseInt(((dataobject)x).getmitgliedsnr())) j--;
Das ständige Parsen bremst den eigentlichen Sortiervorgang enorm aus. Wenn die Mitgliedsnummer als String in einem Format vorliegt, dass garantiert in einen Integer geparst werden kann, wieso speicherst Du sie dann nicht von vornherein als int? Damit wirst Du den Sortiervorgang nach meiner Einschätzung um einen großen Faktor beschleunigen können.

Außerdem ist der Name "dataobject" nicht besonders aussagekräftig. Da ein dataobject eine Mitgliedsnummer hat, solltest Du die Klasse vielleicht in "Mitglied" oder einen anderen sprechenden Namen umbenennen.

Wenn Du das Array statt Object[] als Mitglied[] deklarierst, kannst Du Dir das ganze Gecaste sparen. Und für den Comparator verwenden wir Generics, dann brauchst Du dort auch nicht casten.

Also:
Code:
class Mitglied
{
	private int mitgliedsnr;
	private String name;
	
	public Mitglied(int mitgliedsnr, String name)
	{
		this.mitgliedsnr = mitgliedsnr;
		this.name = name;
	}
	
	public int getmitgliedsnr()
	{
		return mitgliedsnr;
	}
	
	public String toString()
	{
		return name + ", " + mitgliedsnr;
	}
}

public class QuickSorter2
{
	public static void sort(Mitglied[] mitglieder)
	{
		java.util.Arrays.sort(mitglieder, new java.util.Comparator<Mitglied>()
		{
			public int compare(Mitglied a, Mitglied b)
			{
				return a.getmitgliedsnr() - b.getmitgliedsnr();
			}
		});
	}
}
Der Trick mit der einfachen Subtraktion in der compare-Methode funktioniert nur, wenn Mitgliedsnummern nicht negativ sind, aber davon kann man wohl ausgehen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Assotiationen: Objektarrays Java Basics - Anfänger-Themen 2
G Mehrere Spalten mit Comparator sortieren Java Basics - Anfänger-Themen 2
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
O Sortieren mit Insertion Sort Java Basics - Anfänger-Themen 3
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
G zweidimensionales int Array sortieren Java Basics - Anfänger-Themen 57
K Java sortieren. Java Basics - Anfänger-Themen 7
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
J Tabelle Sortieren Java Basics - Anfänger-Themen 48
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
L Sortieren Java Basics - Anfänger-Themen 1
C Wie 2 Arrays zusammenfügen und sortieren? Java Basics - Anfänger-Themen 11
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
O 2D-Array nach einer Spalte sortieren Java Basics - Anfänger-Themen 22
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
DorFey Sortieren eines mehrdimensionalen Arrays Java Basics - Anfänger-Themen 8
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
L Array sortieren Java Basics - Anfänger-Themen 4
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
T Java: Array monat absteigend sortieren? Java Basics - Anfänger-Themen 1
B Liste sortieren? Java Basics - Anfänger-Themen 4
P Array Sortieren mit boolean? Java Basics - Anfänger-Themen 33
scratchy1 Array sortieren und dann String-Repräsentation ausgeben Java Basics - Anfänger-Themen 2
O Arrays sortieren in einer Methode Java Basics - Anfänger-Themen 2
E Methoden 2 Arrays sortieren (MergeSort) Java Basics - Anfänger-Themen 3
B Suchen und sortieren Java Basics - Anfänger-Themen 10
F Zahlen im Feld sortieren + Unterprogramm Java Basics - Anfänger-Themen 4
O Zweidimensional Array sortieren Java Basics - Anfänger-Themen 14
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
CptK Variablen Teile eines Arrays zufällig sortieren Java Basics - Anfänger-Themen 7
K Methoden Array[][] sortieren Java Basics - Anfänger-Themen 30
CptK Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
E ArrayList sortieren Java Basics - Anfänger-Themen 16
L Methode zum sortieren Java Basics - Anfänger-Themen 1
L Methode zum sortieren Java Basics - Anfänger-Themen 1
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
A Sortieren ausgerechneter Werte aus einer TXT Datei Java Basics - Anfänger-Themen 8
E LMC (Assembler) Sortieren von 3 Zahlen Java Basics - Anfänger-Themen 4
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
A Array sortieren Java Basics - Anfänger-Themen 1
N StringArray alphabetisch sortieren Java Basics - Anfänger-Themen 4
Tommy135 Erste Schritte JavaDoc Sortieren Java Basics - Anfänger-Themen 5
R Winkel berechnen bzw. Geraden sortieren Java Basics - Anfänger-Themen 33
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
D Arraylisten sortieren bitte um Hilfe Java Basics - Anfänger-Themen 4
informatikschüler21 String im Array sortieren Java Basics - Anfänger-Themen 4
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
M Arrays sortieren und kleinster Abstand Java Basics - Anfänger-Themen 3
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
N TreeMap alphabetisch sortieren? Java Basics - Anfänger-Themen 3
I <List> sortieren Java Basics - Anfänger-Themen 2
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
R Objekte Vergleichen und Sortieren Java Basics - Anfänger-Themen 3
I Sortieren nach Priorität Java Basics - Anfänger-Themen 3
S List<T<X,Y> sortieren Java Basics - Anfänger-Themen 5
W Array sortieren Java Basics - Anfänger-Themen 3
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
Alex/89 Werte einer .txt Datei sortieren Java Basics - Anfänger-Themen 8
N Bubble Sort sortieren mit Int Werte Java Basics - Anfänger-Themen 8
N Collection sortieren/ filtern Java Basics - Anfänger-Themen 7
C Methoden Einfach verkette Liste - int Werte aufsteigend sortieren Java Basics - Anfänger-Themen 1
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
S array sortieren Java Basics - Anfänger-Themen 7
D Array mit Zufallszahlen, dann sortieren: Hilfe gesucht! Java Basics - Anfänger-Themen 1
D Methoden int-Array absteigend sortieren Java Basics - Anfänger-Themen 8
C Chars in einem String alphabetisch sortieren Java Basics - Anfänger-Themen 1
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
J Sortieren Java Basics - Anfänger-Themen 21
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
J Ungewolltes Sortieren eines Arrays Java Basics - Anfänger-Themen 4
T Collections Sortieren von Automodellen (v.a. BMW und Mercedes) Java Basics - Anfänger-Themen 3
P Liste sortieren verschiedener generischer Typen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben