博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法导论——求最大子数组问题
阅读量:4310 次
发布时间:2019-06-06

本文共 2030 字,大约阅读时间需要 6 分钟。

利用分治算法求最大子数组问题

#include
#include
#define _CRT_SECURE_NO_WARNINGS#pragma warning(disable:4996)int const N = 100;using namespace std;struct ARRAY { int high; int low; int sum;};int A[N];ARRAY FIND_MAX_SUBARRAY(int* A, int low, int high);ARRAY FIND_MAX_CROSSING_SUBARRAY(int* A, int low, int mid, int high);int main() { int i; int n=0; for (i = 1; i <= N-1; i++) { cin >> A[i]; n++; char c;//= cin.get(); c = getchar(); if (c != ' ') break; } printf("\n"); ARRAY array; array= FIND_MAX_SUBARRAY(A, 1, n); for (i = array.low; i <= array.high; i++) { printf("%d ", A[i]); } return 0;}ARRAY FIND_MAX_CROSSING_SUBARRAY(int* A, int low, int mid, int high) { int left_sum = -999; int right_sum = -999; int sum = 0; int max_left=0,max_right=0; int i; for (i = mid; i >= low ; i--) { sum = sum + A[i]; if (sum > left_sum) { left_sum = sum; max_left = i; } } sum = 0; for (i = mid+1; i <= high; i++) { sum = sum + A[i]; if (sum > right_sum) { right_sum = sum; max_right = i; } } ARRAY p; p.sum = left_sum + right_sum; p.low = max_left; p.high = max_right; return p;}ARRAY FIND_MAX_SUBARRAY(int* A, int low, int high) { if (low == high) { ARRAY p; p.sum = A[low]; p.low = A[low]; p.high = A[high]; return p; } else { ARRAY cross; ARRAY left; ARRAY right; int mid = (low + high) / 2; left = FIND_MAX_SUBARRAY(A, low, mid); right = FIND_MAX_SUBARRAY(A, mid+1, high); cross = FIND_MAX_CROSSING_SUBARRAY(A, low, mid, high); if (left.sum >= right.sum && left.sum >= cross.sum) { return left; } else if (left.sum < right.sum && right.sum >= cross.sum) { return left; } else return cross; } }

输入输出:

 

转载于:https://www.cnblogs.com/hwaa/p/10901850.html

你可能感兴趣的文章
JavaScript中的 JSON 和 JSONP
查看>>
字符串相关工具类
查看>>
iOS:图标尺寸
查看>>
项目冲刺,20151118
查看>>
O055、Detach Volume 操作
查看>>
MyBatis学习(3)
查看>>
otrs离线部署
查看>>
spring ioc原理(看完后大家可以自己写一个spring)
查看>>
[codevs 1039]数的划分
查看>>
【会议记录】第一次例会(9.22)记录
查看>>
SpringBoot与缓存
查看>>
java内存分析
查看>>
current_date与sysdate区别
查看>>
流畅设计 Fluent Design System 中的光照效果 RevealBrush,WPF 也能模拟实现啦!
查看>>
Android源码解析01:下载Android源码
查看>>
NodeJS05
查看>>
Windows10更新后,远程桌面无法登录服务器 提示远程桌面协议 CredSSP 出现漏洞
查看>>
开发一个移动应用之前应该思考的5件事
查看>>
[转] iOS 常用数学函数
查看>>
shiro过滤器解释类
查看>>