-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMaxSubarray.c
More file actions
executable file
·57 lines (44 loc) · 1.06 KB
/
MaxSubarray.c
File metadata and controls
executable file
·57 lines (44 loc) · 1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <stdio.h>
typedef struct
{
int start;
int end;
}ArrayTuple;
int FindMaxCrossingSubarray(int array[], int low, int mid, int high, ArrayTuple *subArray)
{
int leftMax, rightMax;
int sum, i;
subArray->start = mid;
for(i=mid, leftMax=array[i]; i>=low; i--)
{
sum += array[i];
if(sum > leftMax)
{
subArray->start = i;
leftMax = sum;
}
}
sum = 0;
subArray->end = mid+1;
for(i=mid+1, rightMax=array[i]; i<=high; i++)
{
sum += array[i];
if(sum > rightMax)
{
subArray->end = i;
rightMax = sum;
}
}
return (leftMax+rightMax);
}
int main(int argc, void *argv[])
{
int sum;
int len;
int testArray[] = {-100,13,23,-30,70,1,0,-43};
ArrayTuple subArray;
len = sizeof(testArray)/sizeof(int);
sum = FindMaxCrossingSubarray(testArray, 0, len/2, len-1, &subArray);
printf("subArray start from %d to %d with sum %d.\n", subArray.start, subArray.end, sum);
return 0;
}