Ich tüftele schon seit Stunden an dem Programm und es klappt nicht...
Das Array muss aufsteigend sortier werden.
Wo ist mein Fehler? Ich darf AUCH NICHTS IMPORTIEREN
//Die Methode soll folgenden Algorithmus in Java implementieren:
Durchlaufe das int-Array a von vorne nach hinten und prüfe dabei für jede Stelle j, ob
a[j] > a[j+1]. Falls ja, vertausche a[j] mit a[j+1]. Wiederhole den Durchlauf durch das Array
solange, bis bei einem Durchgang keine Vertauschung mehr durchgeführt werden musste.
Hier mein Code:
Code:
class bubblesort{
public static void bubblesort(int[] array){
boolean sortiert=true;
while(sortiert==true){
sortiert=true;
for(int k=0;k<array.length;k++){
if(array[k]>array[k+1]){
int hilfe=array[k+1];
array[k+1]=array[k];
array[k]=hilfe;
sortiert=false;
}
}
}
}
public static void main(String[] args){
int [] array = {9,5,2};
bubblesort(array);
for ( int z=0;z<array.length;z++){
System.out.print(array[z]+" ");
}
}
}
Auf den ersten Blick fällt schonmal auf, dass
while(sortiert=true){
dort eine Zuweisung gemacht wurde. Die Abfrage müßte (wenn überhaupt) dann lauten
while(sortiert==true){
Was man aber auch einfach schreiben kann als
while(sortiert){
Ansonsten: Vor und nach jedem Schritt (d.h. jedem Schleifendurchlauf) den Array auf der Konsole ausgeben, und genau nachvollziehen, was er gerade macht.
(Wobei ich natürlich (und imho berechtigterweise) davon ausgegangen bin, dass kein normaler Mensch einfach so sinnfrei ein Programm schreiben will, das einen Array sortiert, wenn es nicht gerade eine Erstsemester- oder Schul-Übung ist, in der man Bubblesort, Bubblesort und nichts als Bubblesort implementieren soll :roll: )
guter ansatz, aber ein paar kleine schnitzer, so funktionierts
Code:
//Klassen schreibt man groß
class Bubblesort{
public static void bubblesort(int[] array){
boolean sortiert=true;
while(sortiert==true){
//es ist noch nicht sortiert! also false
sortiert=false;
//nur bis länge-1, da du ja auf k+1 zugreifst
for(int k=0;k<array.length-1;k++){
if(array[k]>array[k+1]){
int hilfe=array[k+1];
array[k+1]=array[k];
array[k]=hilfe;
//jetzt wurde sortiert
sortiert=true;
}
}
}
}
public static void main(String[] args){
int [] array = {9,5,2,82,1};
bubblesort(array);
for ( int z=0;z<array.length;z++){
System.out.print(array[z]+" ");
}
}
}
Aber um (mal wieder) pedantisch zu sein: Das, was du ursprünglich implementiert hattest, war eher sowas wie Gehe davon aus, dass das Array sortiert ist. Solange das int-Array sortiert ist, gehe davon aus, dass das Array sortiert ist, durchlaufe das int-Array a von vorne nach hinten und prüfe dabei für jede Stelle j, ob a[j] > a[j+1]. Falls ja, vertausche a[j] mit a[j+1], und nimm dann an, dass das Array NICHT sortiert ist.
ich habe gemeint "es wurde sortiert"
solange sortiert wurde, bla bla bla
so gehts natürlich auch:
Code:
class Bubblesort{
public static void bubblesort(int[] array){
boolean sortiert=false;
while(sortiert==false){
//ist ist noch nicht sortiert! also false
sortiert=true;
//nur bis länge-1, da du ja auf k+1 zugreifst
for(int k=0;k<array.length-1;k++){
if(array[k]>array[k+1]){
int hilfe=array[k+1];
array[k+1]=array[k];
array[k]=hilfe;
//jetzt wurde sortiert
sortiert=false;
}
}
}
}
public static void main(String[] args){
int [] array = {9,5,2,82,1};
bubblesort(array);
for ( int z=0;z<array.length;z++){
System.out.print(array[z]+" ");
}
}
}
Eigentlich meinte ich, dass die textuelle Beschreibung eher eine do-while Schleife nahe legt (man muss ja mindestens einmal durchlaufen, um zu sehen, ob etwas vertauscht werden musste) aber wie gesagt, das ist ziemlich unbedeutend...