动态数组问题
生成两个随机数组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)以秒为单位,结果会一样的。。