Bubble Sort sortieren mit Int Werte

Nawid993

Mitglied
Hallo,

ich hab hier viel durchgelesen. Aber ich bekomme es nicht bei mein Code hin.
Code:
public class BSort{
   
    static int bubblesort(int[]feld){
        //Starte von vorne bei 1 (0 wird durch j-1 erreicht !)
        for(int i=1; i<feld.length;i++){
            //Bringe das kleinste Element des jeweiligen Feldes nach vorne
            for(int j=feld.length-1; j>=i; j--){
                if (feld[j]<feld[j-1]){
                    int temp = feld[j];
                    feld[j] = feld[j-1];
                    feld[j-1]=temp;
                }
            }
        }return -1;
       
    }
   
    public static void main(String[] args){
       
        int[] h={12,35,75,21,42,9};
       
       
        // int [] sortiere = bubblesort(h);
       
        for(int i =0; i<h.length; i++){
            System.out.print(bubblesort[i] + ", ");
        }
       
    }

}
 
Also das ist alles noch etwas wirr. Was soll die Funktion bubblesort genau machen und zurück geben? Was sie derzeit macht, ist das übergebene Array zu sortieren. Das sah erst einmal auf den ersten Blick auch ok aus.
Die Rückgabe ist aber dann unverständlich. Da gibst Du jetzt ein int zurück, aber das ist ja dann unnötig. Das übergebene Array wird sortiert und dann musst Du nichts zurück geben.

Somit kannst Du das return statement raus nehmen und die Rückgabe zu void machen.
Aufruf ist dann bubblesort(h); ohne irgend eine Rückgabe zu bekommen.
Und dann gibst Du natürlich h aus am Ende.
 
Ich verstehe nur nicht wie ich am Ende abrufen kann. Ich hab jetzt return entfernt und oben

static void bubblesort(int[] feld)
geschrieben.

Danach habe ich bei main ein Array erstellt.
Die zweite Zeile int[] g=bubblesort(h);
die funktioniert nicht

BSort.java:21: error: incompatible types: void cannot be converted to int[]
int[] g=bubblesort(h);
^
1 error

das erscheint bei mir
 
Du gibst ja nichts zurück, d.h. du hast ein Array und dieses Array wird sortiert. Also Du hast int[] h und rufst dann bubblesort(h) auf. Danach ist h sortiert. Also keinerlei Zuweisung beim Aufruf von bubblesort.

Wenn Du dieses Verhalten nicht willst, müsstest Du in Bubblesort:
- Am Anfang das übergebene Array kopieren (clonen)
- Dann das kopierte Array sortieren
- Dann das kopierte Array zurück geben

Das ist ein anderes Vorgehen, das natürlich ebenso funktionieren kann.
 
So:
Java:
        int[] array = {2, 1};
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = i; j < array.length - 1; j++) {
                if (array[j] > array[j + 1]) {
                    // ...
                }
            }
        }

Von Anfang durchlaufen.

Edit: Sorry, so:
Java:
        int[] array = {2, 11, 12, 10, 9, 8, 8, 8, 1};
        for (int i = 1; i < array.length; i++) {
            for (int j = 0; j < array.length - i; j++) {
                if (array[j] > array[j + 1]) {
                    // ...
                }
            }
        }
 
@DerWissende Das BubbleSort von ihm ist doch in Ordnung. In welcher Richtung das Array durchlaufen wird, ist ja egal. Wichtig wäre bei umgedrehter Richtung Dann aber, dass nicht das kleinste Element nach vorne sondern das Größte nach hinten geschoben werden muss.

Also wie gesagt: Die Funktion bubblesort selbst ist ok!
 
Vielen Dank 🙂

Ich bin noch am Anfang von Programmieren. Da ich erste Semester leider mit Unsinn beschäftigt war, muss ich jetzt alles bis 11 April können. Sonst kann ich mein Wirtschaftsinformatik vergessen.
 
@DerWissende Das BubbleSort von ihm ist doch in Ordnung. In welcher Richtung das Array durchlaufen wird, ist ja egal. Wichtig wäre bei umgedrehter Richtung Dann aber, dass nicht das kleinste Element nach vorne sondern das Größte nach hinten geschoben werden muss.

Also wie gesagt: Die Funktion bubblesort selbst ist ok!

Achso! Dann funktioniert sein Code aber bei mir:
Java:
        for (int i = 1; i < array.length; i++) {
            for (int j = array.length - 1; j >= i; j--) {
                if (array[j] < array[j - 1]) {
                    // ...
                }
            }
        }

Getestet hab ich hiermit:
Code:
array = [5, 2, 6, 4, 1, 5, 4, 3, 1]
array = [1, 1, 2, 3, 4, 4, 5, 5, 6]

array = [4, 7, 6, 5, 6, 3, 5, 2, 1, 1]
array = [1, 1, 2, 3, 4, 5, 5, 6, 6, 7]

array = [2, 5, 6, 3, 6, 1, 2, 2, 2, 6, 4]
array = [1, 2, 2, 2, 2, 3, 4, 5, 6, 6, 6]
 
Vielen Dank 🙂

Ich bin noch am Anfang von Programmieren. Da ich erste Semester leider mit Unsinn beschäftigt war, muss ich jetzt alles bis 11 April können. Sonst kann ich mein Wirtschaftsinformatik vergessen.

Mach's dir bei Algorithmen herstellung so einfach wie möglich!, dann verstehen es ach die anderen. Kopf hoch ...
 

Zurück
Oben