WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Bubblesort rekursiv geht das nicht? JAVA (http://www.wcm.at/forum/showthread.php?t=195093)

coolbininet 11.07.2006 20:56

Bubblesort rekursiv geht das nicht? JAVA
 
Hallo Leute!

Frage mich, ob ich den Bubble Sort auch rekursiv lösen kann. Habe da folgenden Code gebastelt. Problem die Rekursion geht mir das Array nur einmal durch. Was ist da falsch, oder geht das rekursiv nicht?


public class bubblehope {

static int[] zahlen = new int[4];
static boolean sorted = false;
static int zaehler = 0, temp = 0;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int u = 55;

for (int i=0; i < zahlen.length; i++)
{
zahlen[i] = u--;

}
zahlen = bubblesort();
for (int i=0; i < zahlen.length-1; i++)
{
if (zahlen[i] < zahlen[i+1])
{
sorted = false;
zahlen=bubblesort();
}
else
{
System.out.println("unsortiert!");
break;
}
}


for (int i=0; i < zahlen.length; i++)
{
System.out.println(zahlen[i]);
}

}

public static int[] bubblesort()
{
//System.out.println(zaehler);
if (!sorted)
{
sorted = true;
if (zaehler >= zahlen.length-1)
{
return zahlen;
}

if (zahlen[zaehler] > zahlen[zaehler+1])
{
temp = zahlen[zaehler];
zahlen[zaehler] = zahlen[zaehler+1];
zahlen[zaehler+1] = temp;
sorted = false;
}
zaehler++;
bubblesort();
}
return zahlen;
}

}

Bitte und danke um Hilfe *g*!

Coolbininet

jak 12.07.2006 12:53

Das schöne an bubblesort ist doch das er extrem simpel ist. Wenn du einen rekursiven Sortieralgorithmus implementieren willst, warum nimmst du nicht quicksort?
Demo: http://java.sun.com/docs/books/tutor...ads/index.html

Zu deinem Problem:
Falls du eine IDE (Eclipse, NetBeans, Borland JBuilder, ...) verwendest geh das Programm mal Schritt für Schritt in einem Debugger durch und schau' dir an was passiert.
Ich vermute mal, das du nur die innere Schleife des Bubblesort implementiert hast, schau dir mal die Implementierung hier an: http://www.oberstufeninformatik.de/i...ubblesort.java
Alles in allem ist bubblesort aber nicht besonders geeignet für eine Rekursive implementierung.

BTW.: Wenn du die [ code] [ /code] (ohne Leerzeichen) Tags verwendest, sieht man die Einrückungen, das ist leichter lesbar.

jak

xandl33 12.07.2006 13:36

stimmt du müßtest noch ne schleife in deinen bubblesort integrieren, da du den sort ja nur solange rekursiv aufrufst bis zahler => zahlen.length-1 ist, an dieser stelle bist am arrayende angekommen und hörst mit der rekursion auf.

coolbininet 12.07.2006 20:27

Danke für die Hilfe!
 
Hallo xandl33!

Wo genau muss ich da ne Schleife einbauen? Stehe gerade auf der Leitung!

Bitte poste, wenn möglich den Code!

Grüße

Coolbininet

xandl33 13.07.2006 10:10

public class Bubblehope {

static int[] zahlen = new int[4];
static boolean sorted = false;
static int zaehler = 0, temp = 0;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int u = 55;

for (int i=0; i < zahlen.length; i++)
{
zahlen[i] = u--;

}
for (int i=0; i< zahlen.length;i++){
sorted=false;
zaehler=0;
zahlen = bubblesort();
}

for (int i=0; i < zahlen.length-1; i++)
{
if (zahlen[i] > zahlen[i+1])
{
System.out.println("unsortiert!");
break;
}
}


for (int i=0; i < zahlen.length; i++)
{
System.out.println(zahlen[i]);
}

}

public static int[] bubblesort()
{
//System.out.println(zaehler);
if (!sorted)
{
sorted = true;
if (zaehler >= zahlen.length-1)
{
return zahlen;
}

if (zahlen[zaehler] > zahlen[zaehler+1])
{
temp = zahlen[zaehler];
zahlen[zaehler] = zahlen[zaehler+1];
zahlen[zaehler+1] = temp;
sorted = false;
}
zaehler++;
bubblesort();
}
return zahlen;
}

}

xandl33 13.07.2006 10:17

hi,

müßte so eigentlich gehen (hab aber nur sehr kurz drüber gschaut, bin zur zeit im stress, also teste das programm mit verschiedenen zahlenreihen).

dein problem war das du im main die if anweisung

if (zahlen[i]<zahlen[i+1]){

bubblesort();
}

oder so ähnlich ghabt hast. dadurch das du aber die zahlen schon einmal sortiert hast hast ist im array 54,53,52,55 gstanden und somit die bubblesort funtkion nie zum einsatz gekommen. zusätzlich darfst du nicht vergessen den zähler nach jeder rekursion wieder auf 0 zu setzen.

kannst dir ja bei gelegenheit das buch runterladen

http://www.galileocomputing.de/katal...584A2-CL5-kM8E

alternativ findest du auch unter www.javabuch.de ein buch im html format das sich sehr gut fürs nachschlagen eignet (würde in gedruckter form 60€ kosten).

wenn du weiter java programmieren willst schau dir mal eclipse.

lg
andi


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag