如何对整数数组进行洗牌?

时间:2013-12-14 23:21:37

标签: java arrays

嘿伙计们我想要洗牌和整数排列。假设我有这个数组:int [] array = {1,2,3,4,5}; 我想把它洗牌,以便顺序完全随机。例如:int [] array = {3,5,1,4,2};对于java

3 个答案:

答案 0 :(得分:2)

不确定您使用的编程语言,但我会用Python回答。

from random import shuffle
alist = [[i] for i in range(5)]
shuffle(alist)

答案 1 :(得分:1)

洗牌的算法非常简单 - 但你需要完全正确,或者随机播放实际上是随机的。

在java中:

for (int i=0;i<arr.length;i++) {
    int swap = random.nextInt(arr.length-i) + i;
    int temp = arr[swap];
    arr[swap] = arr[i];
    arr[i]=temp;
}

基本上,您扫描列表中的当前元素,并从列表中随机选择一个元素到列表末尾。

重要的是你只选择前进,否则你不会得到均匀分布。

大多数语言(包括Java)都有内置的随机播放功能。

答案 2 :(得分:0)

我将用Java回答:

int[] a = int[] { 1, 2, 3, 4, 5 }; // example array

int length = a.length(); // for convenience, store the length of the array

Random random1 = new Random(); // use a standard Java random number generator

int swap = 0; // use an extra variable for storing the swap element
int r1 = 0; // for convenience, store the current randomly generated number

for (int i=0; i<length(); i++) { // iterate over each field of the array

    r1 = random1.nextInt(length - 1); // generate a random number representing an index within the range of 0 - a.length - 1, i.e. the first and the last index of the array

    swap = a[i]; // swap part 1
    a[i] = a[r1]; // swap part 2
    a[r1] = swap; // swap part 3
}

//根据Java随机生成器

,数组是shuffeld