解题思路:
随机的取出一个(0 - n)之间的数据与a[0]交换。
随机的取出一个(1 - n)之间的数据与a[1]交换。
随机的取出一个(2 - n)之间的数据与a[2]交换。
……………..
随机的取出一个(n-1 - n)之间的数据与a[n-1]交换。
代码实现:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
/*
*函数功能:洗牌算法,随机打乱一个数组
*函数参数:card 数组
* nums 数组元素的个数
*/
int random_card(int* card, int nums)
{
int temp = 0;
int index = 0,now = 0;
/* 判断指针是否为空 */
if (NULL == card)
{
return 1;
}
/* 随机数发生器的初始化 */
srand(time(0));
for(index = 0; index < nums - 1; index++)
{
now = rand() % (nums-index) + index;
temp = card[now];
card[now] = card[index];
card[index] = temp;
}
return 0;
}
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
random_card(a,10);
for(i = 0; i < 10; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}