Bubblesort-Algorithmus und Testklasse

BadRobot

Mitglied
Liebe Java-Gemeinde,

dies ist mein erster Beitrag, ich hoffe ihr könnt mir ein wenig bei meinem BubbleSort auf die Sprünge helfen🙂 Ich habe folgenden Algorithmus mit entsprechender Testklasse geschrieben, leider wird mein Array unsortiert wieder ausgegeben. Blöderweise weiß ich nicht, woran es liegt:/

Vielen Dank im Vorraus!

Das hier ist der Algorithmus:

Java:
public class BubbleSort {
	//swap-Algorithmus
	static void swap (int u, int v){
		int temp=u;
		u=v;
		v=temp;
	}
	
	//BubbleSort-Algorithmus
	static void bubbleSort (int[]f) {
		for (int i=f.length-1; i>=0; i--){
			int y=i;
			int x=i-1;
		while (x>=0){
			if (f[y]<f[x]){
				swap(f[x], f[y]);
				y=y-1;
				x=x-1;
			}else{
				y=y-1;
				x=x-1;
			}
		}
		}
	}
}

Hier ist meine entsprechende Testklasse:

Java:
public class TestSorter {
	public static void main (String[] args){
		int [] f={333, 1, 15, 789, 9, 35, 2, 90, 1};
		BubbleSort.bubbleSort(f);
		for(int i= 0;i<f.length;i++){
			System.out.print(f[i] + " ");
		}
	}
}
 
Deine swap-Methode verändert nur lokale Variablen; das hat keinen Effekt auf das Array.

Was Du eigentlich willst, wäre wohl etwas in dieser Art:
Java:
    static void swap ( int[] array, int idx1,  int idx2){
        int temp=array[idx1];
        array[idx1] = array[idx2];
        array[idx2] = temp;
    }
 
Zuletzt bearbeitet:
idx1 und idx2 sind Indizes für das Array. Da Java bei einfachen Datentypen (wie int) eine Kopie der Variablen beim Methodenaufruf erstellt (call by value), verändert deine ursprüngliche swap methode gar nichts. Wenn du aber ein Array übergibst, ist das was anderes (call by reference). Veränderst du innerhalb einer Methode das Array, so bleibt die Veränderung erhalten.
Deshalb solltest die das Array übergeben und dazu die beiden Positionen(Indezes), an denen die Werte im Array vertauscht werden sollen.
 
Ich habe ihn jetzt überarbeitet und zum laufen gebracht, yippie!

Java:
public class BubbleSort implements Sorter{
	
	//BubbleSort-Algorithmus
	static void bubbleSort (int []f){
		for (int i=0; i<f.length; i++){
			for (int j=0; j<f.length-1-i; j++){
				if(f[j]>f[j+1]){
					int temp=f[j];
					f[j]=f[j+1];
					f[j+1]=temp;
				}
			}
		}
	}
 

Neue Themen


Zurück
Oben