![]() |
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 |
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 |
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.
|
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 |
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; } } |
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