随机不重复选择方法改进
void suijishu( int a[] , int n )//产生随机不重复的数
{
int i,j;
srand(time(NULL));
for( i = 0 ; i < n ; i++ )
{
do
{
a[i] = rand()%n;
for ( j = 0 ; j < i ; j ++)
{
if(a[i] == a[j])
{
break ;
}
}
}
while (j < i);
}
}
此方法可以进行随机数的选择但存在着明显的弊端:
1. 原理
此法用一个整形数组接受随机选择的数字,再用循环判断选择的数字是否已经包含在之前抽取的字符中。
2. 缺点
只能进行数字的随机选取, 无法直接进行字符或字符数组的随机选取,并且当数据较大时会出现随机的
数是先前出现的并且不断重复,并且用循环判断但数据较大会使运行缓慢。
改进后的代码
void randomsize_array(char (array)[100],int size)
{
int i ;
int randomnumber_index;
char temp[100];
srand((unsigned short)time(NULL));
for( i = 0 ; i<size ;i++)
{
randomnumber_index = rand()%(size-i);//从(size-i)个中选取
strcpy(temp,array[randomnumber_index]);
strcpy(array[randomnumber_index],array[size-1-i]);
strcpy(array[size-1-i],temp);
}
}
1. 改进说明
此法运用数将要选择的对象用数组存储,在进行随机选择后将第一个选择出的数组元素与最后一个元
素进行调换,之后将随机的范围缩小1个位置,这样既可以保证随机不重复的选择还可以对各种类型数
据进行选择,也避免了上一类方法的缺点。