现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

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

2013-07-13 19:31 工业·编程 ⁄ 共 4322字 ⁄ 字号 暂无评论

一、计算运行时间

                在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; 

给我留言

留言无头像?