Ich bin momentan einige Sortieralgorithmen am implementieren.
Der Code vom Bucketsort läuft soweit auch, dass Problem ist jedoch, dass die 10 aus dem Testaufruf "verschluckt" wird.
Als Lösungsansatz kam mir die Idee, das Array z auf Länge m zu setzen und die a[j] quasi um eins verschoben zu speichern. Ich kriege das leider aber nicht hin. Von daher wäre ich sehr dankbar, wenn mir jemand etwas Hilfestellung geben könnte.
Der Code vom Bucketsort läuft soweit auch, dass Problem ist jedoch, dass die 10 aus dem Testaufruf "verschluckt" wird.
Als Lösungsansatz kam mir die Idee, das Array z auf Länge m zu setzen und die a[j] quasi um eins verschoben zu speichern. Ich kriege das leider aber nicht hin. Von daher wäre ich sehr dankbar, wenn mir jemand etwas Hilfestellung geben könnte.
Java:
// bestimme Anzahl der a[i] mit a[i] = j und speichere diese in z[j]
for(int j=0; j<a.length; j++) {
z[a[j]-1] = z[a[j]-1]+1; // verschoben
}
Java:
public class BucketSort {
public static void BucketSort(int [] a, int m) {
// m ist maximaler Schlüssel aus a
int [] b = new int[a.length];
int [] z = new int[m+1];
// initialisiere z
for(int i=0; i<=m; i++) {
z[i] = 0;
}
// bestimme Anzahl der a[i] mit a[i] = j und speichere diese in z[j]
for(int j=0; j<a.length; j++) {
z[a[j]] = z[a[j]]+1;
}
// bestimme für jedes j Anzahl der Schlüssel, die kleiner gleich j sind
for(int i=1; i<m; i++) {
z[i] = z[i] + z[i-1];
}
for(int j=a.length-1; j>=0; j--) {
b[z[a[j]]] = a[j];
z[a[j]] = z[a[j]]-1;
}
// Kopiere b nach a
for(int j=0; j<a.length; j++) {
a[j] = b[j];
}
}
public static void main(String [] args) {
int [] a = new int[] {1,8,3,9,5,2,6,10,7,4};
BucketSort(a, 10);
for(int i=0; i<a.length; i++) {
System.out.print(a[i]);
}
}
}