c++ 生成随机数、计算运行时间

        一、计算运行时间

                在c++中,可添加<ctime>头文件来计算运行时间,一种简单的方法是定义两个数,如int start=clock(),int end=clock() ,则运行时间为t=end-start,可直接输出,如cout<<end-start, 注意显示的时间为毫秒。

         二、生成随机数

                 在c++中,一般用rand()来生成随机数,可以这样写

#include<iostream>
using namespace std;
int main()
{
	int a[100];
	int i;
	for(i=0;i<10;i++)
		a[i]=rand();
	for(i=0;i<10;i++)
		cout<<a[i]<<endl;

	return 0;
}

不过这样生成的是伪随机数,因为每次运行的结果都一样。这与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。如果想要生成真正的随机数,则要对strand()进行设置,可以把系统时间设为随机数种子, srand( (unsigned)time( NULL ) ),这样srand()函数就产生一个以当前时间开始的随机种子,不过时间间隔要超过1秒。


#include<iostream>
#include<ctime>
using namespace std;
int main()
{
	int a[100];
	int i;
	srand( (unsigned)time( NULL ) );
	for(i=0;i<10;i++)
		a[i]=rand();
	for(i=0;i<10;i++)
		cout<<a[i]<<endl;

	return 0;
}

一个完整的程序,题目如下:

定义一个足够大的整型数组,并任意选择三种不同的排序算法对数组中的数据进行排序(按从小到大的顺序排序),记录每种算法的实际耗时,并结合数据结构中的知识对算法的时间复杂度分析进行说明。实验数据分两种情况进行比较:

1、数组中的数据随机生成;

2、数组中的数据已经是非递减有序。

这里运用到了随机数和运行时间


#include<iostream>
#include<ctime>
using namespace std;
const int MAX=10000000;
int n;

void bubble_sort(int a[])
{
	int i,j; 
	int flag=1;
	while(flag)
	{
		flag=0;
		for(i=0;i<n-2;i++)
		{
			for(j=0;j<n-1-i;j++)
			{
				if(a[j]>a[j+1])
				{
					int temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
					flag=1;
				}
			}
		}
	}
}


void insertion_sort(int b[])
{
	int i,j,key;
	for(j=1;j<n;j++)
	{
		key=b[j];
		i=j-1;
		while(i>=0&&b[i]>key)
		{
			b[i+1]=b[i];
			i--;
		}
		b[i+1]=key;
	}
}

void merge(int A[],int p,int q,int r)
{
	int i,j,k;
	int n1=q-p+1;
	int n2=r-q;
	int *L;
	L=new int[n1+2];
	int *R;
	R=new int[n2+2];
	for(i=1;i<=n1;i++)
		L[i]=A[p+i-1];
	for(j=1;j<=n2;j++)
		R[j]=A[q+j];
	L[n1+1]=MAX;
	R[n2+1]=MAX;
	i=j=1;
	for(k=p;k<=r;k++)
	{
		if(L[i]<=R[j])
		{
			A[k]=L[i];
			i++;
		}
		else
		{
			A[k]=R[j];
			j++;
		}
	}
	delete []L;
	delete []R;
}
void merge_sort(int A[],int p,int r)
{
	if(p<r)
	{
		int q=(p+r)/2;
		merge_sort(A,p,q);
		merge_sort(A,q+1,r);
		merge(A,p,q,r);
	}
}
int main()
{
	cout<<"数据规模为:";
	while(cin>>n&&n)
	{
		srand((unsigned int)time(NULL));
		int flag=1;
		int *a=new int [n];
		int *b=new int [n];
		int *c=new int [n];		
		for(int i=0;i<n;i++)
			a[i]=b[i]=c[i]=rand();

		/*
		cout<<"*****************************************************************"<<endl;
		for(i=0;i<n;i++)
			cout<<a[i]<<" ";
		cout<<endl;
		for(i=0;i<n;i++)
			cout<<b[i]<<" ";
		cout<<endl;
		for(i=0;i<n;i++)
			cout<<c[i]<<" ";
		cout<<endl;
		cout<<"*****************************************************************"<<endl;
		*/

		int start1_1=clock();
		bubble_sort(a);
		int end1_1=clock();

		int start1_2=clock();
		bubble_sort(a);
		int end1_2=clock();


		int start2_1=clock();
		insertion_sort(b);
		int end2_1=clock();


		int start2_2=clock();
		insertion_sort(b);
		int end2_2=clock();



		int start3_1=clock();
		merge_sort(c,0,n-1);
		int end3_1=clock();

		int start3_2=clock();
		merge_sort(c,0,n-1);
		int end3_2=clock();

		/*
		cout<<"*****************************************************************"<<endl;
		for(i=0;i<n;i++)
			cout<<a[i]<<" ";
		cout<<endl;
		for(i=0;i<n;i++)
			cout<<b[i]<<" ";
		cout<<endl;
		for(i=0;i<n;i++)
			cout<<c[i]<<" ";
		cout<<endl;
		cout<<"*****************************************************************"<<endl;
		*/

		cout<<"               随机生成    非递减有序"<<endl;
		cout<<"冒泡排序用时:  "<<(double)(end1_1-start1_1)<<"ms";
		cout<<"         "<<(double)(end1_2-start1_2)<<"ms"<<endl;
		cout<<"插入排序用时:  "<<(double)(end2_1-start2_1)<<"ms";
		cout<<"         "<<(double)(end2_2-start2_2)<<"ms"<<endl;
		cout<<"归并排序用时:  "<<(double)(end3_1-start3_1)<<"ms";
		cout<<"         "<<(double)(end3_2-start3_2)<<"ms"<<endl;

		cout<<endl<<"数据规模为:";
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值