import java.util.Random;
public class Shuffle {
private static Random rnd = new Random();
public static void shuffle(Object[] a) {
for (int i = 0; i < a.length; i++) {
swap(a, i, rnd.nextInt(a.length));
}
}
private static void swap(Object[] a, int i, int j) {
Object tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
Aвторы доказывают, почему он не достаточно хорош, и рекомендуют использовать библиотечный класс
java.utul.Collections
, у которого есть метод shuffle
. В принципе, достаточно изменить метод так:public static void shuffle(Object[] a) {
for (int i = a.length; i > 1; i--) {
swap(a, i - 1, rnd.nextInt(i));
}
}
}
Говорят, что надо читать Кнута. А я у него только второй том осилил ;)