最大子段和 C语言源码
来源:互联网 发布:java获取自己程序名字 编辑:程序博客网 时间:2024/06/02 04:54
#include <stdio.h>typedef struct { size_t st; size_t end; int sum;} ArraySection;/* 求整型数组的最大子段和,结果存于ret */void max_section(int *arr, size_t len, ArraySection *ret) { size_t st = 0, end = 0; int sum = *arr;// sum:以当前元素为结尾的所有子段中,子段和最大者 size_t i; ret->st = ret->end = 0; ret->sum = sum; for (i = 1; i < len; ++i) { if (sum < 0) { sum = arr[i]; end = st = i; } else { ++end; sum += arr[i]; } if (sum > ret->sum) { ret->st = st; ret->end = end; ret->sum = sum; } }}/* 测试代码 */int main() { ArraySection as = { 0, 0, 0 }; int arr[] = { -12, 23, 34, -4, -12, 128 }; max_section(arr, sizeof(arr) / sizeof(*arr), &as); printf("st=%u\nend=%u\nsum=%i\n", as.st, as.end, as.sum); return 0;}