auch negative Zahlen sotieren

Diskutiere auch negative Zahlen sotieren im Java Basics - Anfänger-Themen Bereich.
D

Darknet

Was muss ich hier ändern um negative Zahlen korrekt zu sotieren?

Code:
public int[] bubbleSort(int[] a1){
    int i = 1;
  
     
   
      if(a1.length == 0){
       return a1;
       }
    int zwischenschpeicher =0;
    do{
       
        if(a1[i]<a1[--i] ){ i++;
            zwischenschpeicher = a1[i];
            a1[i] = a1[--i];
            a1[i] = zwischenschpeicher;
        }
        i++;
        i++;
    } while(i < a1.length);
   
    return a1;
}
 
D

Darknet

Das ganze ist eine do while schleife start bei Index 1 und fragt den vorherigen wert ob er größer ist wenn ja vertausche die werte.
Ja das geht auch anderster aber ich soll es mit einer do while schleife schreiben
 
mihe7

mihe7

Ich meinte auch nicht die Schleife, sondern die Verwendung der Pre-/Post-Inkrement-Operatoren. Damit das jemand versteht, muss er sich erst einmal damit beschäftigen, in welcher Reihenfolge Java Ausdrücke auswertet.
 
D

Darknet

Code:
public int[] bubbleSort(int[] a1){
    int i = 1;
  
     
   
      if(a1.length == 0){
       return a1;
       }
    int zwischenschpeicher =0;
    do{
       
        if(a1[i]<a1[i-1] ){ i+1;
            zwischenschpeicher = a1[i];
            a1[i] = a1[i-1];
            a1[i] = zwischenschpeicher;
        }
       i+1;
       i+1
    } while(i < a1.length);
   
    return a1;
}
Hab ich gerade glernt --i erst abziehen i-- erst nach den durchlauf abziehen :)
 
mihe7

mihe7

Das ist etwas völlig anderes: mit den Inkrement-Operatoren wird der Wert der Variablen verändert. Mit der Addition alleine dagegen nicht. Daher sind die Zeilen i+1; völlig sinnfrei.

Und
Java:
            a1[i] = a1[--i];
            a1[i] = zwischenschpeicher;
liefert ein anderes Ergebnis als
Java:
            a1[i] = a1[i-1];
            a1[i] = zwischenschpeicher;
 
D

Darknet

Habs jetzt nicht getestet :(. Aber es funktioniert ja mit --i nur negative Zahlen nicht
 
mihe7

mihe7

Aber es funktioniert ja mit --i nur negative Zahlen nicht
Ah ja:
Java:
import java.util.Random;
import java.util.Arrays;

public class Test {
    private Random rand = new Random(1L);

    public int[] bubbleSort(int[] a1){
        int i = 1;
      
         
       
          if(a1.length == 0){
           return a1;
           }
        int zwischenschpeicher =0;
        do{
           
            if(a1[i]<a1[--i] ){ i++;
                zwischenschpeicher = a1[i];
                a1[i] = a1[--i];
                a1[i] = zwischenschpeicher;
            }
            i++;
            i++;
        } while(i < a1.length);
       
        return a1;
    }

    public boolean perform(int[] expected, int[] data) {
        try {
            int[] actual = bubbleSort(data);
            if (Arrays.equals(expected, actual)) {
                return true;
            }
            System.err.printf("Expected %s but got %s\n", 
                    Arrays.toString(expected), Arrays.toString(actual)); 
        } catch (Exception ex) {
            System.err.printf("Expected %s while sorting %s but got an exception\n",
                    Arrays.toString(expected), Arrays.toString(data));
            ex.printStackTrace();
        }
        return false;
    }
    
    public static void main(String[] args) {
        Test test = new Test();
        int testCases = 10;
        int failures = 0;
        for (int i = 0; i < testCases; i++) {
            int[] data = test.createRandomArray(i);
            int[] expected = new int[data.length];
            System.arraycopy(data, 0, expected, 0, data.length);
            Arrays.sort(expected);
            if (!test.perform(expected, data)) {
                failures++;
            }
        }

        System.out.printf("%d of %d tests failed\n", failures, testCases);
    }

    private int[] createRandomArray(int len) {
        int[] data = new int[len];
        for (int i = 0; i < len; i++) {
            data[i] = rand.nextInt(len);
        }
        return data;
    }
}
 
D

Darknet


Soll sein:[-5, -4, -3, -2]Ist zustand:[-3, -4, -5, -2]
Falsch
Falsch
Soll zustand:
[-5, -4, 2, 3]
Ist Zustand:[2, -4, -5, 3]
 
mihe7

mihe7

Was willst Du uns mit dieser Tabelle sagen? Und hast Du den Code aus Kommentar #11 schon mal laufen lassen?
 
D

Darknet

Die Tabelle zeigt an was rauskommt Soll was rauskommen soll und ist wie es rauskommt. Ich nutze nur ein vorgefertigten Script also hab nur zugriff auf die Klasse BubbleSort diese bereits ausgetauscht aber nichts besser
 
mihe7

mihe7

Ja, weil Dein Code nicht funktioniert und zwar nicht nur bei negativen Zahlen sondern im Allgemeinen.

Schau Dir an, wie Bubblesort funktioniert und schreib den Code neu aber so, dass Du ihn auch verstehst.
 
Blender3D

Blender3D

Was muss ich hier ändern um negative Zahlen korrekt zu sotieren?
Wenn der Code korrekt formuliert ist funktioniert er auch mit negativen Zahlen.
Java:
if(a1[i]<a1[--i] )
Hier wird während des Vergleichs die laufende Variable verändert. Was auf alle Fehler einen Fehler darstellt.

Bring die fehlerhafte Verwendung der Inkrementoperatoren in Deinem Code in Ordnung und die Frage wegen der negativen Zahlen erübrigt sich.
Außerdem benötigt Bubblesort eine doppelte Schleife.
 
K

kneitzel

Also so massiv, wie du i verringerst und erhöhst würde der Code bei mir durchfallen unabhängig davon, ob er funktioniert oder nicht. Das —i im if machst du nach dem if mit einem i++ sofort rückgängig, aber Dein Tauschen kann nicht funktionieren:
Angenommen i ist 10, dann speicherst du den 10 wert.
Dann wird der 10. Wert zu dem 9ten Wert, i ist danach 9.
Dann schreibst du den gemerkten Wert in den 9. Wert.

Da mich interessiert, wie Dein Lehrer reagiert:
Mach aus der zweiten Zuweisung aus dem i ein ++i, damit machst du das idiotische —i rückgängig...

Dann könnte es funktionieren ....
 
K

kneitzel

Aber im Ernst: schau Dir an, was —i, ++i, i— und i++ machen.

Oder merke Dir einfach: i++ und i— alleine als reiner increment ist ok, wer sowas aber meint in irgendwelchen Befehlen verwenden zu wollen, der schreibt Code, der unleserlich ist und sehr anfällig für Fehler ist... und wird dann bei sogenannten Coderevisionen entsprechend angegangen....
 
Thema: 

auch negative Zahlen sotieren

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben