连续数组中最大子数组之和

一、目的

熟悉编程风格

自学简单C++代码

简单性能测试

二、编程

主函数:

int main()
{
    int arry[10000];
    int Length = 0, i;
    cout << "输入数组的大小" << endl;
    cin >> Length;
    cout << "依次输入数组的值" << endl;
    for (i = 0; i < Length; i++)
        cin >> arry[i];
    int len = sizeof(arry) / sizeof(int);
    //cout<<len<<endl;
    int sum = FindGreatestSumOfSubArray(arry, len);
    cout << "最大子序列和:" << sum << endl;
    return 0;
}

求和函数:

int FindGreatestSumOfSubArray(int arry[], int len)
{
    if (arry == NULL || len <= 0)
        return -1;
    int currSum = 0;//保存当前最大和
    int greatestSum = -10000;//保存全局最大和
    for (int i = 0; i < len; i++)
    {
        if (currSum < 0)//如果当前最大和为负数,则舍弃前面的负数最大和,从下一个数开始计算
        {
            currSum = arry[i];
        }
        else
            currSum += arry[i];//如果当前最大和不为负数则加上当前数
        if (currSum > greatestSum)//如果当前最大和大于全局最大和,则修改全局最大和
        {
            greatestSum = currSum;
        }
    }
    return greatestSum;
}

三、单元测试

使用VS2017进行工程项目的单元测试

配置过程:

解决方案----->右键----->添加----->新建项目----->本机单元测试项目

 

测试项目的名称随便取

测试项创建成功后需要在测试项中引用需要测试的项目

测试项----->右键----->添加----->引用

配置完成后编写实现代码:

#include "pch.h"
#include "CppUnitTest.h"
#include "..\MaxArray\MaxArray.cpp"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace MaxArrayUnitTest1
{
    TEST_CLASS(MaxArrayUnitTest1)
    {
    public:
        
        TEST_METHOD(TestMethod1)
        {
            int test1[8] = { 1, -2, 3, 5, -3, 6, 1, -1 };
            Assert::AreEqual(12,FindGreatestSumOfSubArray(test1, 8));
            int test2[5] = { 1,-2,6,-5,9 };
            Assert::AreEqual(10, FindGreatestSumOfSubArray(test2, 5));
        }
    };
}

运行结果:

 

 四、性能分析

CPU使用率

 

 内存使用率:

 

posted @ 2021-03-13 00:49  彭仔  阅读(123)  评论(1)    收藏  举报