蛮力法求解最大字段和问题C++代码
以下代码实现了用蛮力法求解最大字段和问题,并统计代码运行时间
#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <iomanip>
#include <stdio.h>
using namespace std;
int *maxSum(int a[], int len){
int maxSum = 0;
int sum = 0;
int i, j, *index;
index = (int *)malloc(sizeof(int)*3); //申请空间
for(i=0; i<len; i++){
sum = a[i];
for(j=i+1; j<len; j++){
a[i]+=a[j]; //a[i]及后面所有元素的和
if(a[i]>sum){
sum = a[i]; //每一趟的最大值
if(a[i]>maxSum){
index[2] = j+1;
}
}
}
if(sum>maxSum){
maxSum = sum;
index[0] = sum;
index[1] = i+1;
}
}
return index;
}
int main()
{
int a[6] = {-20, 11, -4, 13, -5, -2};
int *max;
LARGE_INTEGER nFreq;
LARGE_INTEGER nBeginTime;
LARGE_INTEGER nEndTime;
double time;
QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&nBeginTime);
max = maxSum(a, 6);
QueryPerformanceCounter(&nEndTime);
time=(double)(nEndTime.QuadPart-nBeginTime.QuadPart)*1000000000/(double)(nFreq.QuadPart);
cout << "最大子段和是:" << max[0] << endl;
cout << "Start:" << max[1] << endl;
cout << "End:" << max[2] << endl;
cout << "Time used: " << time << endl;
return 0;
}