InsertionSort

cuchulainn

Mitglied
Hallo,

in meinem Programm soll ich ein Integer-Array mit dem Sortieralgorithmus InsertionSort sortieren. Mein Quelltext sieht folgendermaßen aus:

Code:
    public void insertionSort() {
        int hilf;
        int j;

        for (int i = 1; i <= feld.length - 1; i++) {
            j = i;
            hilf = feld[j];
            while ((feld[j - 1] > hilf) && (j > 0)) {
                feld[j] = feld[j - 1];
                j--;
            }
            feld[j] = hilf;
        }
    }

Manchmal funktioniert er, aber meistens bekomme ich den Fehler: "ArrayIndexOutOfBoundException: -1".
Weiß jemand, wo der Fehler ist? Ich finde ihn einfach nicht.
Schon einmal danke im Voraus.

Gruß

Cuchulainn
 

Snape

Erfahrenes Mitglied
cuchulainn hat gesagt.:
Hallo,

in meinem Programm soll ich ein Integer-Array mit dem Sortieralgorithmus InsertionSort sortieren. Mein Quelltext sieht folgendermaßen aus:

Code:
    public void insertionSort() {
        int hilf;
        int j;

        for (int i = 1; i <= feld.length - 1; i++) {
            j = i;
            hilf = feld[j];
            while ((feld[j - 1] > hilf) && (j > 0)) {
                feld[j] = feld[j - 1];
                j--;
            }
            feld[j] = hilf;
        }
    }

Manchmal funktioniert er, aber meistens bekomme ich den Fehler: "ArrayIndexOutOfBoundException: -1".
Weiß jemand, wo der Fehler ist? Ich finde ihn einfach nicht.
Schon einmal danke im Voraus.

Gruß

Cuchulainn


Nun, der Hase liegt hier im Pfeffer:
Code:
 while ((feld[j - 1] > hilf) && (j > 0)) {
                feld[j] = feld[j - 1];
                j--;

Du fängst mit j=1 an und ich nehme an, die beiden Bedingungen sind erfüllt in der while-Klausel. D.h. der erste Durchgang geschieht mit feld[1-1] = feld[0]. Danach dekrementierst Du das j, und es wird feld[0-1] = feld[-1], was zwangsläufig kracht.