Advertisement
Guest User

array.c

a guest
Sep 23rd, 2020
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.56 KB | None | 0 0
  1. #include <stddef.h>
  2. #include <stdlib.h>
  3.  
  4. int *split_and_add(size_t si, const int arr[si], int n, size_t *so) {
  5.  
  6.       // initializing variables
  7.       int left;
  8.       int right;
  9.       int *top_arr;
  10.       int *bottom_arr;
  11.       int *result = malloc(si * sizeof(int));
  12.      
  13.       // copies input arr[] over to use
  14.       for (int i = 0; i < si; i++)
  15.       {
  16.           result[i] = arr[i];
  17.       }
  18.      
  19.   while (n != 0)
  20.   {
  21.       if (si % 2 == 0)
  22.       {
  23.           left = si / 2;
  24.           right = left;
  25.           top_arr = malloc(left * sizeof(int));
  26.           bottom_arr = malloc(right * sizeof(int));
  27.          
  28.           for (int i = 0; i < left; i++)
  29.           {
  30.               top_arr[i] = result[i];
  31.               bottom_arr[i] = result[i+si/2];
  32.           }
  33.       }
  34.      
  35.       else
  36.       {
  37.           left = si / 2 + 1;
  38.           right = left;
  39.           top_arr = malloc(left * sizeof(int));
  40.           bottom_arr = malloc(right * sizeof(int));
  41.           top_arr[0] = 0;
  42.           for (int i = 0; i < left; i++)
  43.           {
  44.               top_arr[i+1] = result[i];
  45.               bottom_arr[i] = result[i+si/2];
  46.           }
  47.       }
  48.      
  49.       // add up both arrays
  50.       for (int i = 0; i < left; i++)
  51.       {
  52.           result[i] = top_arr[i] + bottom_arr[i];
  53.       }
  54.      
  55.       // get new value for array size and reduce count
  56.       si = left;
  57.       n--;
  58.   }
  59.  
  60.       for (int i = 0; i < si; i++)
  61.       {
  62.         printf("%d ", result[i]);
  63.       }
  64.       printf("\n");
  65.       printf("\n");
  66.       *so = si;
  67.       return result;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement