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

首先从所有元素中随机选取一个与第一个元素进行交换,然后在第二个之后选择一个元素与第二个交换,直到最后一个元素。以下用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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,695评论 0 89
  • created by Dejavu(不断更新中) 简介 地面信息的提取对于车形的智能机器人来说十分重要,之前一直采...
    ericdejavu阅读 4,780评论 0 1
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,357评论 0 33
  • 有的东西将她放在心中,作为一个永久性的收藏,其实是对她最好的处理方式。一如阳光,随远,但却温暖依存,因为太阳还在!...
    明媚的忧伤阅读 1,873评论 0 1
  • 在言情小说里,霸道的男一用霸道的方式喜欢着女主,但女主整颗心都放在了温柔的男二身上。最后的结局,往往是女主发现男一...
    海利大人阅读 3,846评论 0 1

友情链接更多精彩内容