Senior Sanchez
2006-07-29, 20:32:30
Hoi,
Meiner einer lernt ja gerade fleißig und da bin ich im Sedgewick übern Straight-Radixsort Algorithmus gestolpert, nur war der wie schon manch andere Algos im Buch fehlerhaft. Jetzt meine ich den korrigiert zu haben, aber er unterscheidet sich in bestimmten Punkten doch sehr vom Sedgewick (bsp. die Größe vom Array count). Kann mir jemand sagen, ob das wirklich Straight-Radixsort ist oder bloß Distribution-Counting?
public class StraightRadixSort {
public static int[] array = new int[5];
public static void main(String[] args) {
for(int i=0; i < array.length; i++) {
array[i] =(int)(Math.random() * Integer.MAX_VALUE);
System.out.print(array[i] + " ");
}
long time = System.currentTimeMillis();
radixSort();
long time2 = System.currentTimeMillis();
System.out.println(time2 - time);
System.out.println("Ergebnis");
for(int i: array) {
System.out.print(i + " ");
}
}
public static void radixSort() {
int m = 32;
int[] count = new int[32];
for(int i=0; i < 32; i++) {
for(int a = 0; a < count.length; a++) {
count[a] = 0;
}
for(int a =0; a < array.length; a++) {
count[bits(array[a], i,1)]++;
}
for(int a =1; a < array.length; a++) {
count[a] += count[a -1];
}
int[] b = new int[array.length];
for(int a =array.length-1; a >=0; a--) {
b[count[bits(array[a], i,1)]-1] = array[a];
count[bits(array[a], i,1)]--;
}
System.arraycopy(b,0,array,0,array.length);
}
}
public static int bits(int x,int k,int j) {
return (x >> k )% (1 << j);
}
}
---------------------------------------------
Ne andere Frage die ich noch habe: Ihr kennt ja sicherlich den Dijkstra-Algorithmus der ja negative Kantengewichte ausschließt.
Die Frage ist nun folgende: Angenommen man hätte negative Kantengewichte, wäre dann bloß die Berechnung falsch oder (wie von manchen behauptet) terminiert der Algorithmus dann nicht mal?
Meiner einer lernt ja gerade fleißig und da bin ich im Sedgewick übern Straight-Radixsort Algorithmus gestolpert, nur war der wie schon manch andere Algos im Buch fehlerhaft. Jetzt meine ich den korrigiert zu haben, aber er unterscheidet sich in bestimmten Punkten doch sehr vom Sedgewick (bsp. die Größe vom Array count). Kann mir jemand sagen, ob das wirklich Straight-Radixsort ist oder bloß Distribution-Counting?
public class StraightRadixSort {
public static int[] array = new int[5];
public static void main(String[] args) {
for(int i=0; i < array.length; i++) {
array[i] =(int)(Math.random() * Integer.MAX_VALUE);
System.out.print(array[i] + " ");
}
long time = System.currentTimeMillis();
radixSort();
long time2 = System.currentTimeMillis();
System.out.println(time2 - time);
System.out.println("Ergebnis");
for(int i: array) {
System.out.print(i + " ");
}
}
public static void radixSort() {
int m = 32;
int[] count = new int[32];
for(int i=0; i < 32; i++) {
for(int a = 0; a < count.length; a++) {
count[a] = 0;
}
for(int a =0; a < array.length; a++) {
count[bits(array[a], i,1)]++;
}
for(int a =1; a < array.length; a++) {
count[a] += count[a -1];
}
int[] b = new int[array.length];
for(int a =array.length-1; a >=0; a--) {
b[count[bits(array[a], i,1)]-1] = array[a];
count[bits(array[a], i,1)]--;
}
System.arraycopy(b,0,array,0,array.length);
}
}
public static int bits(int x,int k,int j) {
return (x >> k )% (1 << j);
}
}
---------------------------------------------
Ne andere Frage die ich noch habe: Ihr kennt ja sicherlich den Dijkstra-Algorithmus der ja negative Kantengewichte ausschließt.
Die Frage ist nun folgende: Angenommen man hätte negative Kantengewichte, wäre dann bloß die Berechnung falsch oder (wie von manchen behauptet) terminiert der Algorithmus dann nicht mal?