int main() { bool flag = false; int A[] = {3, 4, 3, 6, -1, 7, -10, 9, 10}; printf("max sub array sum = %d\n", max_subarray_sum(A, sizeof(A)/sizeof(A[0]), flag)); printf("max sub array multiply = %d\n", max_subarray_multi(A, sizeof(A)/sizeof(A[0]), flag)); int B[] = {-100}; printf("max sub array sum = %d\n", max_subarray_sum(B, sizeof(B)/sizeof(B[0]), flag)); printf("max sub array multiply = %d\n", max_subarray_multi(B, sizeof(B)/sizeof(B[0]), flag)); return 0; }
int max_subarray_sum(int arr[], int l, int h) { // Base Case: Only one element if (l == h) return arr[l]; // Find middle point int m = (l + h)/2; /* Return maximum of following three possible cases a) Maximum subarray sum in left half b) Maximum subarray sum in right half c) Maximum subarray sum such that the subarray crosses the midpoint */ return max3(max_subarray_sum(arr, l, m), max_subarray_sum(arr, m+1, h), max_crossing_sum(arr, l, m, h)); }
void test(int count){ srand(time(NULL)); int i = -1; char buffer[50]; FILE *pFile = NULL; pFile = fopen("maxarrdata.txt", "w"); int naive_res = -1; int opt_res = -1; srand(time(NULL)); for (i = 1; i < count; i = i + 1000) { init(i); init_timer; first_step_timer; naive_res = naive_max_array_sum(ALEA, i); second_step_timer; snprintf(buffer, sizeof(buffer), "%d %lf ", i, tim1); //printf("%d\n", naive_res); first_step_timer; opt_res = max_subarray_sum(ALEA, 0, i-1); second_step_timer; snprintf(buffer+strlen(buffer), sizeof(buffer), "%lf\n", tim1); //printf("%d\n", opt_res); buffer[strlen(buffer)] = '\0'; fwrite(buffer, sizeof(char), strlen(buffer), pFile); free(ALEA); ALEA = NULL; assert(naive_res == opt_res); } fclose(pFile); }
int main(void) { printf("Max subarray sum :%ld\n", max_subarray_sum(arr, SIZE(arr))); return 0; }