动态数组问题
生成两个随机数组X,Y。按F10逐句调试时可以得到两个不同的随机数组,但是按F5启动调试是却出现X,Y数组一样,是异常情况。为什么呢?
代码:
C/C++ code
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
void random(int *&p,int n);
printf("please enter a number!\n");
int n;
scanf("%d",&n);
int *X=NULL; /*创建指针,指向下面创建的动态数组*/
int *Y=NULL;
printf("array X: ");
random(X,n);
printf("array Y: ");
random(Y,n);
system("pause");
}
/*自动生成一个动态数组,接受n个1-99的随机数*/
void random(int *&p,int n)
{
void BubbleSort(int R[],int n);
srand(time(NULL));
p=(int *)malloc(n*sizeof(int ));
for(int i=0;i<n;i++)
{
p[i] = rand()%100;
}
printf("\n");
BubbleSort(p,n);
for(int i=0;i<n;i++)
{
printf("%d ",p[i]);
}
printf("\n");
}
/*冒泡排序法,但是时间复杂度高,如果要减少时间复杂度可以选其他排序法*/
void BubbleSort(int R[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
{
if(R[j]<R[j-1])
{
temp=R[j];
R[j]=R[j-1];
R[j-1]=temp;
}
}
}
}
------解决方案-------------------- 我试了一下,把srand(time(NULL))放在主函数里就可以了。我想原因可能是主函数每次调用函数时都是以系统时间为种子的,两次调用函数时间几乎一样,所以产生了相同的数据。
time函数返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数。
------解决方案--------------------两次调用中间搞个Sleep(1500),不然太快了,time(0)以秒为单位,结果会一样的。。