蠻力法求解最大字段和問題C++代碼

蠻力法求解最大字段和問題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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章