写一个算法完成对数组元素的打乱。用C#语言做
发布网友
发布时间:2024-10-09 01:59
我来回答
共4个回答
热心网友
时间:2024-10-24 10:29
现实中我会直接用random_shuffle函数完成数组的打乱,各种语言基本上都有这个函数,可能名字有些差别。
如果一定要自己写,算法也很简单:
假设数组array长度为n。
用标准随机函数rand(n)生成[0, n-1]之间的一个随机数,将array[n-1]和array[rand(n)]交换,这样就把array[n-1]位置上的数确定了;
再将array[n-2]和array[rand(n-1)]交换,确定array[n-2]位置上的数;
再将array[n-3]和array[rand(n-2)]交换,确定array[n-3]位置上的数;
。。。。。。
最后将array[0]和array[rand(1)]交换(实际就是自己和自己交换),把array[0]确定了
这样生成的array[0..n-1]的数组是完全随机的乱序,且时间复杂度为O(n),空间复杂度为O(1)
我是纯手工输入啊!
热心网友
时间:2024-10-24 10:29
使用随机函数。假设数组长N
逻辑是这样的。你先建一个和数组一样长度的空数组。
建两个随机生成实例random
然后两个random分别随机产生一个0到N-1之间的数n,n'
第一个产生的用于去取源数组中从第一个还没有取过的数开始数到第n个还没有取过的数,把这个数取出。
第二个产生的随机数用于标示在第二个数组中,从第一个还没有被赋值的开始数,到n'那个位置,把刚取到的数赋值给它。
接下来,再用两个random分别产生一个0到n-2之间的数,重复以上过程。直到n-n结束。
热心网友
时间:2024-10-24 10:30
222
热心网友
时间:2024-10-24 10:30
function randomsort(a, b) {
return Math.random()>.5 ? -1 : 1;
}
//usage example
var arr = [1, 2, 3, 4, 5];
arr.sort(randomsort);
trace(arr);
//traces 4,3,1,5,2追问详细点
热心网友
时间:2024-10-24 10:29
现实中我会直接用random_shuffle函数完成数组的打乱,各种语言基本上都有这个函数,可能名字有些差别。
如果一定要自己写,算法也很简单:
假设数组array长度为n。
用标准随机函数rand(n)生成[0, n-1]之间的一个随机数,将array[n-1]和array[rand(n)]交换,这样就把array[n-1]位置上的数确定了;
再将array[n-2]和array[rand(n-1)]交换,确定array[n-2]位置上的数;
再将array[n-3]和array[rand(n-2)]交换,确定array[n-3]位置上的数;
。。。。。。
最后将array[0]和array[rand(1)]交换(实际就是自己和自己交换),把array[0]确定了
这样生成的array[0..n-1]的数组是完全随机的乱序,且时间复杂度为O(n),空间复杂度为O(1)
我是纯手工输入啊!
热心网友
时间:2024-10-24 10:29
使用随机函数。假设数组长N
逻辑是这样的。你先建一个和数组一样长度的空数组。
建两个随机生成实例random
然后两个random分别随机产生一个0到N-1之间的数n,n'
第一个产生的用于去取源数组中从第一个还没有取过的数开始数到第n个还没有取过的数,把这个数取出。
第二个产生的随机数用于标示在第二个数组中,从第一个还没有被赋值的开始数,到n'那个位置,把刚取到的数赋值给它。
接下来,再用两个random分别产生一个0到n-2之间的数,重复以上过程。直到n-n结束。
热心网友
时间:2024-10-24 10:30
222
热心网友
时间:2024-10-24 10:31
function randomsort(a, b) {
return Math.random()>.5 ? -1 : 1;
}
//usage example
var arr = [1, 2, 3, 4, 5];
arr.sort(randomsort);
trace(arr);
//traces 4,3,1,5,2追问详细点