首页 > 代码库 > divide-conquer-combine(4.1 from the introduction to algorithm)
divide-conquer-combine(4.1 from the introduction to algorithm)
this example is from chapter 4 in 《the introduction to algorithm》
the main idea is all showed in the book , i think maybe realizing the algorithm is a good way to understand it.
/*from : introduction to algorithm chapter fouralgorithm:divide and conquerthe time complexity of this algorithm is O(n * logn)*/#include <stdio.h>int Find_max_crossing_subarray(int *a, int low, int mid, int high){ int left_sum = -0xffff; int sum = 0; for (int i = mid; i >= low; i--) { sum += a[i]; if (sum > left_sum) left_sum = sum; } int right_sum = -0xffff; sum = 0; for (int j = mid+1; j <= high; j++) { sum += a[j]; if (sum > right_sum) right_sum = sum; } return left_sum + right_sum;}int find_maximum_subarray(int *a, int low, int high){ if (high == low) { return *(a+high); // base case: only one element } else { int mid = (high + low)/2; if ((find_maximum_subarray(a, low, mid) >= find_maximum_subarray(a, mid+1, high))&&(find_maximum_subarray(a, low, mid)>=Find_max_crossing_subarray(a,low,mid,high))) { return find_maximum_subarray(a, low, mid); } else if ((find_maximum_subarray(a, mid+1, high) >= find_maximum_subarray(a, low, mid))&&(find_maximum_subarray(a, mid+1, high) >= Find_max_crossing_subarray(a,low,mid,high))) { return find_maximum_subarray(a, mid+1, high); } else { return Find_max_crossing_subarray(a, low, mid, high); } }}int main(){ int a[16]={13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7}; int b[6]={1,2,3,4,5}; printf("%d\n",find_maximum_subarray(a,0,15)); printf("%d\n",find_maximum_subarray(b,0,5));}
divide-conquer-combine(4.1 from the introduction to algorithm)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。