Sortierfunktion

hi,

ich hab hier ein problem das Progamm zumlaufen zubringen. Ich hab mich eigentlich streng an denn Pseudocode gehalten. Jedoch weiss ich nicht wieso mein Array eine outofBounds exeption wirft oder wieso mein Array nicht sortiert wird.
http://www.hashimi.ws/cs223/figs/cs223fig33.pdf -> Seite 2

Java Code:

[ol]
[li]public static int[] ccsA2(int a[]) {[/li]
[li] int Count[] = new int[a.length];[/li]
[li] [/li]
[li] [/li]
[li] for (int i = 0; i <= a.length - 1; i++) {[/li]
[li] Count** = 0;[/li]
[li] [/li]
[li] }[/li]
[li] [/li]
[li] for (int i = 0; i <= a.length - 2; i++) {[/li]
[li] for (int j = 0; j <= a.length - 1; j++) {[/li]
[li] [/li]
[li] [/li]
[li] System.out.println("i " + i + "j " + j);[/li]
[li] if (a** < a[j]) {[/li]
[li] Count[j] = Count[j] + 1;[/li]
[li] [/li]
[li] } else {[/li]
[li] Count** = Count** + 1;// a[0] = 1 ; a[1] =2[/li]
[li] [/li]
[li] }[/li]
[li] [/li]
[li] }[/li]
[li] [/li]
[li] [/li]
[li] }[/li]
[li] [/li]
[li] [/li]
[li] [/li]
[li] [/li]
[li] int s[] = new int[a.length];[/li]
[li] for (int i = 0; i <= a.length - 1; i++) {[/li]
[li] s[Count**] = a**;//2[/li]
[li] [/li]
[li] }[/li]
[li] [/li]
[li] return s;[/li]
[li] [/li]
[li] }[/li]
[/ol]

    int count[] = new int[a.length];

    for (int i = 0; i < a.length; i++) {
        count** = 0;
    }

    for (int i = 0; i < a.length - 1; i++) {
        for (int j = i + 1; j < a.length; j++) {
            System.out.println("i: " + i + " j: " + j);
            if (a** < a[j]) {
                count[j] = count[j] + 1;
            } else {
                count** = count** + 1;// a[0] = 1 ; a[1] =2
            }
        }
    }

    int s[] = new int[a.length];
    for (int i = 0; i < a.length; i++) {
        s[count**] = a**;//2
    }

    return s;
}```

Ein Fehler ist, dass in Zeile 9 nicht `int j = i + 1` steht. Ob noch weitere enthalten sind, kann ich nicht sagen, weil ich nicht getestet habe.

Array[5] hat 5 Einträge.
Der letzte Eintrag ist alelerdings an Stelle 4

	public static int[] ccsA2(int a[]) {
		int Count[] = new int[a.length];

		for (int i = 0; i < a.length - 1; i++) {
			Count** = 0;

		}

		for (int i = 0; i < a.length - 2; i++) {
			for (int j = 0; j < a.length - 1; j++) {

				System.out.println("i " + i + "j " + j);
				if (a** < a[j]) {
					Count[j] = Count[j] + 1;

				} else {
					Count** = Count** + 1;// a[0] = 1 ; a[1] =2

				}

			}

		}

		int s[] = new int[a.length +1];
		for (int i = 0; i < a.length - 1; i++) {
			s[Count**] = a**;// 2

		}

		return s;
	}```

Hast du das ausprobiert? Durch bloßes draufschauen sieht das für mich so aus, als ob jetzt alle Indizes (die oberen Grenzen) falsch wären.
Außerdem hat das Array s laut der pdf dieselbe Größe wie das Array a.

Der Algorithmus ist generell verbesserungswürdig… :slight_smile:

Ergebnis bei: Sortierer.ccsA2(new int[]{3,5,1,6,9,4,2,8,7});

i: 0 j: 2
i: 0 j: 3
i: 0 j: 4
i: 0 j: 5
i: 0 j: 6
i: 0 j: 7
i: 0 j: 8
i: 1 j: 2
i: 1 j: 3
i: 1 j: 4
i: 1 j: 5
i: 1 j: 6
i: 1 j: 7
i: 1 j: 8
i: 2 j: 3
i: 2 j: 4
i: 2 j: 5
i: 2 j: 6
i: 2 j: 7
i: 2 j: 8
i: 3 j: 4
i: 3 j: 5
i: 3 j: 6
i: 3 j: 7
i: 3 j: 8
i: 4 j: 5
i: 4 j: 6
i: 4 j: 7
i: 4 j: 8
i: 5 j: 6
i: 5 j: 7
i: 5 j: 8
i: 6 j: 7
i: 6 j: 8
i: 7 j: 8

Die Ausgabe ist nicht das Ergebnis, sondern eine Debugausgabe, die die Schleifenvariablen ausgibt. Anika hat die wahrscheinlich bei der Suche nach der ArrayIndexOutOfBoundsException verwendet. Da wäre ein Debugger zwar deutlich besser gewesen, aber so funktioniert das auch.

Bei deiner Testeingabe kommt ein Array mit folgenden Werten raus:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

*** Edit ***

So lässt sich die Ausgabe erzeugen:

System.out.println(Arrays.toString(sorted));```