# Sortieren von Array



## HansMeiser (2. Dez 2012)

Guten Abend Leute,
Ich lunger hier schon eine Weile rum und habe meine hobbymäßigen Java-Probleme bisher ganz gut selber lösen können. Im Moment hab ich aber einen kleinen Blackout der mich wahnsinning macht und ich hoffe ihr könnt mir da aushelfen.


Das Programm an dem ich arbeite soll einfach nur ein Array der größe n sortieren; Werte aufsteigend vom kleinsten zum größten.

Mein Code ist größtenteils ok!


```
class aufgabe2a{

public static void main(String[] args){
int[] array = { 5, 4, 3, 1, 0 };
int tmp=0;

	for (int count=0; count<array.length;count++){
		
		for(int next=count+1; next<array.length;next++){

	if(array[count]<=array[next])
		count++;
	else
		{tmp=array[count];
		array[count]=array[next];
		array[next]=tmp;}
		if(count==0)
			count++;
		else
			count--;
			}}
	
	
	System.out.println(array[0]);
	System.out.println(array[1]);
	System.out.println(array[2]);
	System.out.println(array[3]);
	System.out.println(array[4]);
	}
	
	}
```

Bei allen anderen Werten für das Array wird es korrekt sortiert. Diese Sequenz gibt jedoch einen Output von: 10345.

Warum packt er die Null nicht an den Anfang?

Und nebenbei, kann ich die Werte eines Arrays auch mit einem einzigen Befehl ausgeben statt mit der Anreihung von print Befehlen? In den Vorlesungsmaterialien hab ich dazu bisher noch nichts gefunden.

(enhanced-for Schleife wäre eine Idee meinerseits, aber keine Ahnung ob man das dafür benutzt):bahnhof:


----------



## Bamone (2. Dez 2012)

Schau mal hier nach, ist sehr gut erklärt 

http://www.java-forum.org/allgemeines/39510-arrays-listen-sortieren.html

Das sollte dir zum Sortieren helfen

```
java.util.Arrays.sort(array);
```


----------



## HansMeiser (2. Dez 2012)

Vielen Dank schonmal für den Hinweis! Im Link hab ich ja auch schonmal den Befehl wie ich das ganze mit einem einzigen print-Befehl wiedergeben kann.

In Praxis würde man sicherlich den von dir empfohlenen sort Befehl nutzen, allerdings habe ich dieses Prog von Vorlesungsfolien einer Uni und ich denke es geht darum, dass man generell erstmal in die Denkart von Programmieren reinkommt und deshalb nur die grundlegendsten Befehle nutzt.

Mit dem sort-Befehl ist mir schon geholfen,wenn jemand noch der Vollständigkeit halber auf den Fehler in meinem Code stößt wäre ich sehr dankbar.


----------



## Hobbes (3. Dez 2012)

Das Problem ist, dass du ständig den Wert der count-Variable veränderst. Was du damit erreichen willst, ist mir nicht klar. Schaue dir mal mit einem Debugger an, wann welche Werte miteinander verglichen werden.



> Bei allen anderen Werten für das Array wird es korrekt sortiert



Das stimmt übrigens nicht. Es gibt genug andere Beispiele, in denen dein Code auch nicht funktioniert 

Hier mal funktionierender Code


```
import java.util.Arrays;

public class MainClass {
  public static void main(String[] args) {

    int[] array = { 5, 4, 3, 1, 0 };
    System.out.println("Unsortierte Liste: " + Arrays.toString(array));

    for (int count = 0; count < array.length; count++) {
      for (int next = count + 1; next < array.length; next++) {
        if (array[count] > array[next]) {
          int tmp = array[count];
          array[count] = array[next];
          array[next] = tmp;
        }
      }
    }

    System.out.println("Sortierte Liste:   " + Arrays.toString(array));
  }

}
```


----------



## HansMeiser (3. Dez 2012)

Yoo danke sehr Hobbes, der Code funktioniert super!

Die Idee dahinter war, dass ich die count variable für die Position im Array verwenden wollte; next ist dabei immer der darauffolgende Wert im Array.

Durch Einsatz dieser beiden Variablen als Index sollten die Werte dann ausgetauscht werden...
Zur besseren Verständlichkeit poste ich mal die Aufgabe mit den Anforderungen an den Code.



> Gegeben ist ein Array der Länge n, das unterschiedlich große Zahlen enthält. Ziel ist es, den Inhalt des Arrays der Größe nach aufsteigend zu sortieren. Schreiben Sie ein Programm, das für die Sortierung den folgenden Algorithmus benutzt:
> 
> Eingabe: ein Array
> Starte am Anfang des Arrays
> ...



Eure Lösungsvorschläge sind natürlich viel effizienter als der Algorhitmus der Universität. So langsam zweifel ich ein bisschen daran ob ich mich weiter an deren Vorlesungen orientieren sollte...ueh:


----------



## SlaterB (3. Dez 2012)

bei deinen eingebauten Fehlern solltest du es noch eher vermeiden, bei anderen zu zweifeln 

die Aufgabe so wie du sie postest ist bisschen undeutlich, welches 'sonst' zu welchem 'falls' gehört,
aber mehrfach count in einem Durchlauf zu erhöhen, dazu noch in der for-Schleife gar ein drittes Mal, das kann ja nicht gemeint sein

so:

```
int count = 0;
        while (count < array.length - 1)
        {
            if (array[count] <= array[count + 1])
                count++;
            else
            {
                tmp = array[count];
                array[count] = array[count + 1];
                array[count + 1] = tmp;

                if (count == 0)
                    count++;
                else
                    count--;
            }
        }
```
sortiert es bei mir auch dein Beispielarray, 
vielleicht nicht das Optimum an Sortierung in der Welt des 21. Jahrhunderts, aber eine gute Aufgabe um zu üben,
was dir anscheinend noch sehr gut tun würde, rein objektiv festgestellt, soll keine negative Wertung sein

solche Algorithmen verstehen, (korrekt) programmieren können, das wäre ein wertvoller Lernerfolg,
nur nachschlagen und abschreiben kann jeder (na gut, da kann man auch noch Fehler machen..)


übrigens ist dein Code schlecht formatiert, siehst du Zeile 14 bis 21 als Einheit zum else in Zeile 13 in deinem ersten Posting an? die Klammern sprechen eine andere Sprache, die sind entscheidend!


----------



## HansMeiser (3. Dez 2012)

SlaterB hat gesagt.:


> solche Algorithmen verstehen, (korrekt) programmieren können, das wäre ein wertvoller Lernerfolg,
> nur nachschlagen und abschreiben kann jeder (na gut, da kann man auch noch Fehler machen..)
> 
> 
> übrigens ist dein Code schlecht formatiert, siehst du Zeile 14 bis 21 als Einheit zum else in Zeile 13 in deinem ersten Posting an? die Klammern sprechen eine andere Sprache, die sind entscheidend!




Also bei dem Lösen der Aufgaben merke ich schon, dass es mir weit mehr für das Programmieren bringt als alles andere, daher hab ich meine Informatikfreunde auch um die Übungs Folien ihrer Uni gebeten. Ausserdem merke ich jetzt schon, dass die Anmeldung hier im Forum mich schnell weiterkatapultieren wird durch das sezieren eigener Fehler und Patzer anderer Leute. :rtfm:

Das ganze mache ich allerdings erst 2 Wochen und mir fängt nach ner Zeit an heiß im Kopf zu werden und ich blick kaum noch durch meinen eigenen Code durch. 
Beim Draufblicken am nächsten Tag hab ich den Fehler auch direkt erkannt...so eine Pause tut schon gut.

Hoffentlich wird das schnell besser, im Beruf kann man sich ja bestimmt nicht erlauben erst nen Tag später fehler in einer Klasse oder so zu finden.


----------



## tschero (8. Dez 2012)

> und ich blick kaum noch durch meinen eigenen Code durch




```
//hier koennte ein Kommentar ueber einer Codezeile stehen
```


----------

