![]() |
[JAVA] Char Array mit Bubblesort durch While-Schleife sortieren
Ich sitze gerade im Technikum Porgrammieren und stehe total auf m Schlauch.
Wenn jemand von euch weiß wie ich folgende Aufgabe lösen kann bin ich euch echt dankbar. Auch für Denkanstöße jeglicher Art bin ich dankbar. Code:
class While { 2. Modify the program While to use the length property of an array. Declare the array F to have 6 elements of type character. 3. Implement bubblesort for a character array of at least 6 elements. Display the elements before sorting and after every change in the array. Think about the best way to display what your program is doing. Initialize the array appropriately to test your program. You may use only WHILE and IF-THEN-ELSE for program control! The loop statements FOR and DO are not allowed! VERBOTEN! Use comments to describe what your program does. 4. Extend your bubblesort solution to count how many times the inner loop is executed, and how many times elements are swapped. Bis jetzt hab ich: Code:
/* Belenus |
jetzt fehlt fast nur noch bubblesort ^^
schau dir den pseudocode bei wikipedia an. |
Grundsätzlich steckt ja nicht so viel dahinter wenn gleich man zugeben muss dass man hier und da stolpern kann. Meine Frage, was ist deine Frage? Oder soll ich dir den Code jetzt runter schreiben?
Schwierigkeiten seh ich eigentlich nur bei der Kasakadierung der Schleifen für den Bubblesort. Besonders beim Vergleich von zwei chars. Denn was ist größer a oder b? Um das sauber zu lösen musst du den char in einen Hex-Wert wandeln. (Zuordnung ASCII Tabelle). Wenn du den Bubblesort richtig verstanden hast, weist du das maximal n*(n-1)/2 Durchläufe notwendig sind um dein Array im "Worst-Case" zu sortieren. Vielleicht hilft dir das etwas bei der Implementierung. Wenn du noch Fragen hast, Frag! Ansonsten würd ich dir empfehlen einfach mal Code zu implementieren und hier zu posten. Ich sag dir dann schon ob der Gedankengang richtig ist bzw wie die Umsetzung ausschaut. :) Falls ich nit Antwort schreib kurz PN die gibts bei mir direkt aufs Handy ;) Lg |
Zitat:
Man kann sich zB auch einfach die ASCII Werte mit nem kleinen Typecasting ausgeben lassen: Code:
System.out.print((int)'a'); // liefert die Dezimalzahl 97 Hier mal ein BubbleSort Code von der java-uni.de Code:
public class BubbleSort { mfg |
Ich habe mich noch nie so richtig mit Java beschäftigt aber was mir auffällt:
Zitat:
Code:
while (i <= 5) // loop variable still in range? Code:
while (i <= F.length) // loop variable still in range? |
Zitat:
warum? weil die innere for schleife immer über das komplette array geht, obwohl nach jedem scheifendurchlauf der zu sortierende teil um 1 element abnimmt. |
! :) !
|
@urga: Das ist schon Bubblesort, nur finde ich diesen Algorithmus effektiver da er aufhört zu sortieren wenn alles sortiert ist während der Algorithmus mit zwei for-Schleifen Feldgröße² Durchläufe hat, also weitersortieren will selbst wenn schon alles sortiert ist.
Gerade bei Großen Arrays finde ich diese Version praktischer. |
Zitat:
die 99 muss bei weiteren durchgängen nicht mehr beachtet werden. |
Schon richtig, ich hab mich vertan.
|
Zitat:
Von zwei for-Schleifen hat er auch gar nicht gesprochen. Die Abbruchbedingung ist bei BubbleSort immer die gleiche... ist die Liste sortiert, dann darf der Algorithmus abbrechen, sonst wäre es kein übliches BubbleSort. Bei jedem Durchlauf ist das größte Element immer am Ende (es steigt wie ein Bläßchen nach oben... daher ja auch der Name). Daher muss nicht nach jedem DL die gesamte Liste überprüft werden. |
So LEute danke für eure Tipps ihr habt mir echt super geholfen^^
Wenn ich am Donnerstag wieder in Programmieren sitze poste ich euch mal eine Lösung. Vllt findet ja noch jmd was was man besser machen kann^^ Thx an alle So far Belenus |
So hier jetzt das komplette Prog
Code:
/* |
Zitat:
Aber funktional wohl korrekt. |
Wie gesagt für Anregungen wie man was besser machen kann bin ich immer dankbar. ;)
|
Sehe grad, dass die Abbruchbedingung fehlt. So hat die Implementierung ja immer Worst-case-Laufzeit.
|
Zitat:
evntl. eine sperate methode die das array ausgibt. z.b. Code:
static void printCharArray (char[] a) { |
Ein bissl off-topic:
Warum man immer noch BubbleSort als ersten Sortieralgorithmus lehrt, ist jenseits meines Verständnisses. Das ist so ziemlich der naivste Algorithmus, den ich kennengelernt habe. Andere Algorithmen, die nicht wesentlich schwieriger zu implementieren sind, schlagen BubbleSort selbst im worst-case um Längen. |
a) der ist so simpel, daß auch anfänger ihn selbst lösen können.
b) man kann auch relativ leicht verstehen, das er in O(n²) liegt. c) somit auch einen guten einstieg in die komplexitätstheorie bietet, was zur frage führt, ob man das sortieren nicht effizienter hin bekommen kann, was dann zu d) den effizienteren algorithmen führt. |
Zitat:
Ein Praktiker versteht eben nicht warum man etwas lernt, was man praktisch nie einsetzen wird. Für ihn ist das nutzloses Wissen, wie die ganze Theorie. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.