Forum: PC-Programmierung [Java - Anfänger] Sehr einfach Sortierungsalgorithmus schreiben


von Christian O. (easter)


Lesenswert?

Hallo Gemeinde !

Ich bin in Java noch ziemlicher Anfänger und möchte zur Übung einen 
wirklich sehr simplen Sortieralgorithmus für ein Array schreiben.

Mein Ansatz ist folgender :

Es wird eine Variable definiert mit dem Startwert 0.
Dann wird das Array nach diesem Wert durchsucht, und wenn der Wert 
gefunden wurde, dann wird die erste Zahl eines temporären Arrays auf 
diesen Wert gesetzt. Dann wird die Variable erhöht... Dies soll solange 
geschehen, bis man beim Maximum angekommen ist.

Mein Code ist folgender
1
class DummySort extends Sortierungen{
2
3
      public DummySort(int array[]){
4
            zahlen = array;
5
      }
6
      public void sortieren() {
7
            
8
          int laenge = zahlen.length;  
9
          int temp[] = new int[laenge];    
10
          int tmp0 = 0;
11
          int tmp1 = 0;
12
          int tmp2 = 0;
13
          int i;
14
          int index = 0;
15
          int largest;
16
          
17
          
18
          largest = zahlen[0];
19
          
20
          for(i =0; i < zahlen.length; i++)
21
          {
22
                     
23
                if(largest < zahlen[i])
24
                    {
25
                        largest = zahlen[i];
26
                        index = i;
27
                    }
28
          }
29
          
30
31
       
32
        
33
        
34
         while(tmp2 <= laenge)
35
         
36
         {
37
             if(zahlen[tmp0]  == tmp1)
38
             {
39
                 temp[tmp2] = zahlen[tmp0];
40
                 tmp1++;
41
                 tmp2++;
42
             }
43
           tmp0++;
44
         }
45
                
46
            
47
            
48
    
49
   
50
        System.out.println("BubbbleSort");
51
        System.out.println(anzahlvertauschungen + " " +  anzahlvergleiche);
52
        int j=0;
53
        while(j<zahlen.length)
54
        {
55
            System.out.println(zahlen[j]);
56
            j++;
57
        }
58
59
            
60
            
61
            
62
      }}

Jedoch funktioniert dieser nicht.

Kann mir da jemand einen Tip geben ?

von Gast (Gast)


Lesenswert?

http://de.wikipedia.org/wiki/Bubblesort

Bei Deinem Code sehe ich auf die Schnelle mehrere Probleme:
* Du läufst nur einmal durch ein Feld (was ist eigentlich "zahlen")
* Du überschreibst die Werte statt die Positionen zu tauschen

von Markus Volz (Gast)


Lesenswert?

Hi Christian!

Ich habe Deinen Code mal im Debugger ausprobiert, weil es ein doch recht 
ungewöhnlicher (weil ineffizenter) Ansatz zur Sortierung ist. Aber von 
der Idee her sollte er funktionieren.

Alledings nicht mit dem oben geposteten Code. Denn der läßt sich so 1. 
nicht compilieren und 2. tut er nicht ansatzweise das, was Du gerne 
hättest, daß er tun sollte.

zu 1.: In der Klasse DummySort fehlt der Member zahlen, z.B. "private 
int zahlen[];" irgendwo innerhalb der Klasse, aber außerhalb des 
Konstruktors bzw. der Methode sortieren(). Außerdem fehlen die 
Deklarationen der beiden Variable "anzahlvertauschungen" und 
"anzahlvergleiche".

zu 2.: Ich würde Dir empfehlen, zur Programm-Entwicklung den Debugger zu 
bemühen und das Programm mal im Einzelschritt-Modus auszuführen und Dir 
dabei die Inhalte Deiner Variable, vor allem mal die der Arrays 
anzuschauen. Dann geht Dir recht schnell auf, wo es klemmt. Falls Du 
keinen Debugger zur Hand hast: Es gibt die 
OpenSource-Entwicklungsumgebungen (IDEs) Eclipse und NetBeans. Beide 
sind recht leistungsfähig und enthalten alle Werkzeuge, die man so 
braucht, auch einen Debugger. Falls Du keine IDE hast/einsetzt, es geht 
auch mit Bleistift und einem Stück Papier. Sortiere ein kleines Array 
mit z.B. drei Werten und "führe Dein Programm Schriff für Schritt aus". 
Erstelle dabei eine Tabelle mit einer Spalte pro Variable (pro 
Array-Element ebenfalls eine Spalte) und notiere jede Änderung einer 
Variable in einer neuen Zeile.

Beim "Debuggen" vergleiche mal das Verhalten Deines Programms mit dem, 
was Du erwartest, daß es tun soll.

Viel Erfolg!
Markus

von Christian O. (easter)


Lesenswert?

Hallo Markus !

Das mit den Variablen stimmt schon, es wird ja von der Klasse 
Sortierungen geerbt. Das Problem liegt im Algorithmus an sich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.