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

2017-04-22  本文已影响0人  Kyunban

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

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

using namespace std;

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

int index, tmp, i;

srand(time(NULL));

for(i=0; i<n;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<<a[i]<< "  ";

cout<<endl;

return 0;

}

顺序也可以从后往前:

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

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<<a[i]<<"  "

cout<<endl;

return 0;

}

上一篇 下一篇

猜你喜欢

热点阅读