我对基数排序算法有疑问。我找到了这个实现:
import java.lang.*;
import java.util.LinkedList;
import java.util.Queue;
import java.io.*;
public class RadixSort {
public static void radixSort(int[] data) {
int z = 0 ;
boolean flag = true;
int divisor = 1;
Queue[] buckets = new Queue[10];
for (int i = 0; i < 10; i++)
buckets[i] = new LinkedList();
while (flag) {
flag = false;
// first copy the values into buckets
for (int i = 0; i < data.length; i++) {
int hashIndex = (data[i] / divisor) % 10;
if (hashIndex > 0)
flag = true;
((LinkedList) buckets[hashIndex]).addLast(new Integer(data[i]));
}
// then copy the values back into vector
divisor *= 10;
int i = 0;
for (int j = 0; j < 10; j++) {
while (!buckets[j].isEmpty()) {
Integer ival = (Integer) ((LinkedList) buckets[j])
.getFirst();
((LinkedList) buckets[j]).removeFirst();
data[i++] = ival.intValue();
}
}
z=z+1 ;
System.out.print("Durchlauf " + z + " : ");
for (int m = 0; m < data.length; m++){
System.out.print(data[m] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int i;
int[] arr = new int[15];
System.out.print("original: ");
for (i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 1024);
System.out.print(arr[i] + " ");
}
System.out.println();
System.out.println();
radixSort(arr);
}
}
我想了解定义循环流的位置。如果我有一个长度为4的数字,则循环运行第四个。这定义在哪里?
答案 0 :(得分:1)
我不确定你在寻找什么样的解释,但我希望这会有所帮助:
外部while
循环在flag
为真时运行。首次运行后flag
将为false,除非hashIndex > 0
在您的第一个for
循环中将值分配到存储桶时至少一次{。}}。
然后你有另一个for (int j = 0; j < 10; j++)
,它将为j的每个值运行10次。对于每个j值,嵌套的while循环while (!buckets[j].isEmpty())
将运行多次。