最大子数组 - 工作效率
设计思路:
用一个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