洗牌算法:打乱一个数组的顺序

首先从所有元素中随机选取一个与第一个元素进行交换,然后在第二个之后选择一个元素与第二个交换,直到最后一个元素。以下用C++编程来说明一下。

#include

#include

#include

#include

using namespace std;

void random(int a[],int n){

int index, tmp, i;

srand(time(NULL));

for(i=0; i

index=rand()%(n-i)+i;

if(index!=i){

tmp=a[i];

a[i]=a[index];

a[index]=tmp;

}

}

}

int main(){

int a[100];

int i;

for(i=0; i<100; i++)

a[i]=i;

random(a, 100);

for(i=0; i<100; i++)

cout<

cout<

return 0;

}

顺序也可以从后往前:

#include

#include

#include

#include

using namespace std;

void random(int a[],int n){

int index, tmp, i;

srand(time(NULL));

for(i=n-1;i>0;i--){

index=rand()%i;

tmp=a[i];

a[i]=a[index];

a[index]=tmp;

}

}

int main(){

int a[100];

int i;

for(i=0; i<100; i++)

a[i]=i;

random(a, 100);

for(i=0; i<100; i++)

cout<

cout<

return 0;

}

你可能感兴趣的:(洗牌算法:打乱一个数组的顺序)