The idea is much easier than it actually is. If we are at element i, randomly select an index from (i, array.length - 1), swap value of i and index. Iteratively perform this operation until all elements are selected.
public static void shuffleArray(int[] cards){
int index;
for(int i = 0; i < cards.length; i++){
index = (int)(Math.random() * (cards.length - i)) + i;
swap(cards, i, index);
}
}
private static void swap(int[] cards, int i, int j){
int tmp = cards[i];
cards[i] = cards[j];
cards[j] = tmp;
}
public static void main(String[] args) {
int n = 10;
int[] array = new int[n];
for(int i = 0; i < n; i++)
array[i] = i + 1;
shuffleArray(array);
for(int i : array){
System.out.print(i + " ");
}
System.out.println();
}
No comments:
Post a Comment