第1个回答 2015-11-07
const maxlength=10; {这里的数组中只有10个元素,更多的元素直接改这里的maxlength的值}
change=20; {这里只交换20次,如果想要交换的更多,可以把change的值改成想要的次数}
var i,j,k:longint;
a:array[1..maxlength] of longint;{这里定义成longint是方便你处理更大的数据,下面过程同}
procedure swap(var x,y:longint); {交换}
var s:longint;
begin
s:=x;
x:=y;
y:=s;
end;
begin
for i:=1 to maxlength do readln(a[i]); {读}
randomize; {初始化}
for i:=1 to change do begin
j:=random(maxlength-1)+1; {这样做是防止生成出来的随机数是0,导致数组下标越界,下同}
k:=random(maxlength-1)+1;
swap(a[j],a[k]);
end;
for i:=1 to maxlength do writeln(a[i]);
end.
第2个回答 2013-09-13
C语言代码如下:
#include <stdio.h>
#include <conio.h>
#define N 10
int main(void)
{
int a[N] = {1,2,3,4,5,6,7,8,9,10};
int i;
int index;
int temp;
srand((unsigned)time(NULL));
for (i = N - 1; i > 0; i--)
{
index = rand() % i;
temp = a[i];
a[i] = a[index];
a[index] = temp;
}
for (i = 0; i < N; i++)
{
printf("%d ", a[i]);
}
getch();
return (0);
}
时间复杂度为O(n)。。以下为连续4次的运行结果。。您看看。。
第3个回答 2013-09-13
Fisher-Yates shuffle
// java代码
import java.util.Random;
static Random rng = new Random();
public static void shuffle(int[] array) {
// i is the number of items remaining to be shuffled.
for (int i = array.length; i > 1; i--) {
// Pick a random element to swap with the i-th element.
int j = rng.nextInt(i); // 0 <= j <= i-1 (0-based array)
// Swap array elements.
int tmp = array[j];
array[j] = array[i-1];
array[i-1] = tmp;
}
}
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle本回答被网友采纳