最大子数组

设计思路:

用一个clock()函数记录程序运行的时间,以此来测试工作效率

源代码:

#include<iostream>

#include<ctime>

#define N 2000

 

using namespace std;

 

void main()

{

         int a[N];              //整数数组

         int f;                 //数值范围

         int i,j,k;             //控制循环变量

         int sum,max;      //和与最大值

         int m,n;               //记录子数组

         clock_t start, end;    //记录开始和结束的时间

 

         cout<<"请输入数值范围:";

         cin>>f;

 

         start = clock();

 

         srand((unsigned) time(NULL));

         for (i=0;i<N;i++)

         {

                   a[i]=(rand()%2?-1:1)*rand()%f;

                   cout<<a[i]<<"   ";

         }

         cout<<endl;

         max = a[0];

 

         for (i=0;i<N;i++)

         {

                   for (j=0;j<=i;j++)

                   {

                            sum=0;

                            for (k=j;k<=i;k++)

                                     sum=sum+a[k];

                            if (sum>max)

                            {

                                     max=sum;

                                     m=j;

                                     n=i;

                            }

                   }

         }

         end = clock();

 

         cout << "运行时间为:" << double((end - start))/1000 << " 秒" << endl;

 

         cout<<"子数组的最大值为:"<<max<<endl;

         cout<<"子数组是第"<<m+1<<"个数,到第"<<n+1<<"个数。"<<endl;

         cout<<"子数组是:";

         for (i=m;i<=n;i++)

         {

                   cout<<a[i]<<"  ";

         }

         cout<<endl;

 

}

运行截图:

数组大小500

时间:0.458

数组大小:1000

时间:1.813

数组大小:2000

时间:9.334

数组大小:5000

时间:131.509

原文地址:https://www.cnblogs.com/D9412/p/4388572.html