码迷,mamicode.com
首页 > 编程语言 > 详细

洗牌算法

时间:2016-02-18 13:41:02      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

http://blog.chinaunix.net/uid-20775243-id-2555001.html

下面是一个完全随机的洗牌算法,时间复杂度为O(n)。

/*
 * Description:
 *           洗牌算法
 * Author  :FinL
 * Language: C
 * Date    : 2010-10-08
 */
 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
 
void swap(int &a,int &b)
{
assert(a!=b);
a ^=b;
b ^=a;
a ^=b;
}
 
void display(int card[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ",card[i]);
printf("\n");
}
 
/*算法主程序*/
void Shuffle(int card[],int n)
{
int i;
int index=0;
for(i=0;i<n;i++)
{
/*返回i到n之间的一个数字*/
index=rand()%(n-i)+i;
swap(card[i],card[index]);
}
}
 
int main()
{
int card1[54],card2[54];
int i;
 
for(i=0;i<54;i++)
{
card1[i]=i;
card2[i]=i;
}
 
srand((unsigned)time(NULL));
Shuffle(card1,54);
Shuffle(card2,54);
 
printf("Wash.......\n");
 
display(card1,54);
display(card2,54);
return 0;
}

洗牌算法

标签:

原文地址:http://www.cnblogs.com/fastwave2004/p/5197652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!