Advertisement
Guest User

Untitled

a guest
May 30th, 2015
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. typedef struct {
  2. int left;
  3. int right;
  4. int sum;
  5. } max_subarray;
  6.  
  7. max_subarray find_maximum_subarray(int A[], unsigned low, unsigned high) {
  8. max_subarray suffixes[high - low];
  9.  
  10. suffixes[0].left = low;
  11. suffixes[0].right = low + 1;
  12. suffixes[0].sum = A[low];
  13.  
  14. for (int i = low + 1; i < high; i++) {
  15. if (suffixes[i - 1].sum < 0) {
  16. suffixes[i].left = i;
  17. suffixes[i].right = i + 1;
  18. suffixes[i].sum = A[i];
  19. } else {
  20. max_subarray *previous = &suffixes[i - 1];
  21. suffixes[i].left = previous->left;
  22. suffixes[i].right = i + 1;
  23. suffixes[i].sum = previous->sum + A[i];
  24. }
  25. }
  26.  
  27. max_subarray *max = &suffixes[0];
  28.  
  29. for (int i = low + 1; i < high; i++) {
  30. if (max->sum < suffixes[i].sum) {
  31. max = &suffixes[i];
  32. }
  33. }
  34.  
  35. return *max;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement