Java: ZahlenArray sortieren?!

10/11/2011 16:46 Belur#1
Hey E*pvpers.


Hab das Problem, dass ich mir ein Array ausgeben lasse mit dem ich dann später verschiedenen Sachen machen wollte ...


Wollte die Zahlen, die ausgegeben werden in dem Array jetzt sortieren. also von klein -> groß.

Bin mir nicht genau sicher wie man das macht, bzw irgendwann würd ich es warscheinlich hinkriegen, dann aber ziemlich umständlich und mit tausenden Schleifen.

Hatte mir erst überlegt eine Variable zu nehmen, wo ich den Eintrag des ersten Arrays reinschreibe. Dann vergleich mit dem 2. Wenn die Zahl kleiner ist, übernahme in die Variable wenn nicht, nächsten Arrayeintrag checken etc.

Dann hätte ich am Ende aber erst die erste Zahl(Also die kleinste - und somit den Arrayanfang). Und bei nem Array mit 500 Zahlen oder so wär, dass dann ziemlich unübersichtlich ...




Und eine zweite Frage:

Gibt es eine einfache Möglichkeit 2 Array-Einträge zu tauschen?


Hoffe mir kann da einer helfen.

~Grüße
10/11/2011 16:52 NotEnoughForYou#2
PHP Code:
int[] array = new int[]{ 46275893};
//unsortiert
System.out.printlnjava.util.Arrays.toString( array ));
        
//  sortiert
java.util.Arrays.sort( array );
        
System.out.printlnjava.util.Arrays.toString( array )); 
10/11/2011 16:58 Belur#3
Wenn ich das richtig versteh ist das praktisch eine Sortierrfunktion die Java "von Haus aus" besitzt.

Hab grad noch paar Sachen gefunden zum Thema sortieren:

Also Bubblesort, Heapsort etc.
Was machen die für einen Sinn wenns mit diesen paar Wörtern schon getan ist?
10/11/2011 17:19 xNopex#4
Quote:
Was machen die für einen Sinn wenns mit diesen paar Wörtern schon getan ist?
Keine Ahnung welches Verfahren zum Sortieren von Arrays von Java bei .sort() verwendet wird, aber die verschiedenen Sortierungsverfahren verhalten sich jeweils extremst verschieden in ihrem Laufzeitverhalten. Bubblesort dürfte das einfachste Sortierungsverfahren sein, aber es hat glaub ich auch ein lineares laufzeitverhalten. D.h. umso größer die Anzahl der Elemente, desto länger dauert das Sortieren. Es gibt deshalb Verfahren mit einer flacheren laufzeitkurve z.B. eine logarithmischen Entwicklung, z.B. beim Mergesort. Dieser ist jedoch komplizierter zu programmieren als ein einfacher Bubblesort. Aber dennoch sicher sinnvoll, wenn vergleichsweise viele Elemente sortiert werden sollen.
10/11/2011 18:11 link#5
Java wird vermutlich wie Delphi QuickSort verwenden, da es im Allgemeinen am schnellsten, in-place und ohne viel Drumherum zu implementieren ist.

Wenn du dein Array einfach nur sortiert haben willst, kannst du bei .sort bleiben.
Geht es dir aber um den Algorithmus selber oder du versuchst halt, dein Programm auf Geschwindigkeit zu optimieren, dann solltest du dir eine eigene Funktion schreiben.

Btw. Simples Bubblesort ist zwar langsam, lässt sich aber auch leicht etwas optimieren
10/11/2011 18:20 Obilee#6
JavaDoc: [Only registered and activated users can see links. Click Here To Register...]

Quote:
The sorting algorithm is a tuned quicksort, adapted from Jon L. Bentley and M. Douglas McIlroy's "Engineering a Sort Function",
Also QuikSort. Wenn du sie per Hand nachcoden willst: Sortierverfahren
10/12/2011 19:57 Belur#7
Gibts zu meiner 2. Frage ne schnelle Methode 2 Array Einträge zu vertauschen?
10/12/2011 20:18 Obilee#8
beispiel wenn du den 0. mit dem 1. Eintrag tauschen willst:

int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
10/13/2011 17:59 Belur#9
Also ich hab jetzt diese 2 Mathoden:

PHP Code:
public void abhaengigVonSortiere(int[] zahlenArray) {
        
boolean unsortiert=true;
        
int temp;

        while (
unsortiert){
            
unsortiert false;
            for (
int i=0zahlenArray.length-1i++) 
                if (
zahlenArray[i] > zahlenArray[i+1]) {                      
                    
temp       zahlenArray[i];
                    
zahlenArray[i]       = zahlenArray[i+1];
                    
zahlenArray[i+1]     = temp;
                    
unsortiert true;
            }          
        }
        
    } 


    public 
void sortiere(){

        
abhaengigVonSortiere(zahlenArray);
        for (
int i=0i<zahlenArray.lengthi++) 
            
System.out.print(zahlenArray[i]+" ");    
    } 
Jaa. So klappt das auch.

Hab jetzt nur eine Frage: Kann ich das auch in eine Metode packen?
Hab versucht die letzte for-Schleife in die obere Methoden zu packen aber das geht irgendwie nicht.



Und die 2. Sache:

Ich weiß nicht was der Parameter in der ersten Methode genau macht. Wenn ich wegnehme klappt nix mehr, und wenn ich die Methode ausführe muss ich nen Wert angeben von dem ich garnicht weiß, was ich eingeben sollte.


Wenn ich mir nen Array ausgeben lasse, kann ichs mit der 2. Methode sortieren. Klappt super.

Fragt sich nur ob das in einer Methode geht bzw ob der Paramzter aus der 1. nicht irgendwie weg kann -.-


~Greets
10/13/2011 20:05 link#10
Mathode, Metode, Methode.. was denn nun?

BTT:
Lass es besser, scheint ja sowieso nichts zu werden.
10/13/2011 20:21 Belur#11
Sorry dass ich mich manchmal verschreibe. Bin grad am Pc und bin Laptop-Tastatur gewöhnt.

Ehm. Nja. Um erlich zu sein gib ich nie so schnell auf bzw hinterfrag es lieber um es dann nächstes mal besser zu machen. Kann ja nicht jeder auf Anhieb alles wissen und können wie du O.o
10/14/2011 07:09 Obilee#12
Schreib die Methodennamen hin damit man auch weißt welche du meinst.

@abhaengigVonSortiere: (int[] zahlenArray) heißt du bekommst ein int Array übergeben mit dem du die ganze zeit arbeitest, wenn du das rausnimmst bzw. keins bekommst ist doch klar das alles andere nicht mehr geht oder ?

Du hast beides schon in methoden warum willst du das noch mehr aufsplitten ? Wenn dann müsstest du der forschleife wieder das array übergeben und einen rückgabeparameter einbauen.

Lies dir mal vllt folgende sachen durch: [Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

Du scheinst mir das alles eher auf gut glück zu "coden" ohne wirklich nen plan zu haben was dein code überhaupt macht oder wie die einzelnen sachen funktionieren.
10/14/2011 08:18 Belur#13
Sind nur unterrichtsbezogene sachen ;) da wir ziemlich springen kommt das erst mit zeit und übung. Gucks mir heut mittag an. Danke