Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

mergesort3.c #include <stdio.h> #include <stdlib.h> void mergesort(int* array, i

ID: 3816649 • Letter: M

Question

mergesort3.c


#include <stdio.h>
#include <stdlib.h>

void mergesort(int* array, int lower, int upper);
void merge(int* array, int lower, int middle, int upper);

int main(void) {
int len;
int *p;

printf("Enter the length of the array: ");
scanf("%d", &len);

int array[len];

printf("Enter %d integers: ", len);

for (p = array; p < array+len; p++)
    scanf("%d", p);

mergesort(array, 0, len-1);

printf("The sorted array is: ");
for (p = array; p < array+len; p++) {
    printf("%d", *p);
    if (p < array + len - 1)
      printf(" ");
}
printf(" ");

return 0;
}


void mergesort(int* array, int lower, int upper) {
if (lower < upper) {
    int middle = (lower + upper) / 2;
    mergesort(array, lower, middle);
    mergesort(array, middle+1, upper);
    merge(array, lower, middle, upper);
}
}

void merge(int* array, int lower, int middle, int upper) {
int len_left = middle - lower + 1;
int len_right = upper - middle;
int *left, *right;
int *p, *q, *r;

left = malloc(_____________ * len_left);
if (left == NULL) {
    printf("out of memory ");
    exit(EXIT_FAILURE);
}

right = malloc(______________ * len_right);
if (right == NULL) {
    printf("out of memory ");
    exit(EXIT_FAILURE);
}

for (p = left, r = array + lower; p < left + len_left; p++, r++)
    *p = *r;

for (q = right; q < right + len_right; q++, r++)
    *q = *r;

p = left;
q = right;
r = array + lower;

while (p < left + len_left && q < right + len_right) {
    if (*p <= *q)
      *r++ = *p++;
    else
      *r++ = *q++;
}

while (p < left + len_left)
    *r++ = *p++;

while (q < right + len_right)
    *r++ = *q++;

______________
______________
}

Explanation / Answer

I have edited the code according to the blank spaces. Just run it in the compiler, and it will work as it has worked for me.

#include <stdio.h>
#include <stdlib.h>
void mergesort(int* array, int lower, int upper);
void merge(int* array, int lower, int middle, int upper);
int main(void) {
int len;
int *p;
printf("Enter the length of the array: ");
scanf("%d", &len);
int array[len];
printf("Enter %d integers: ", len);
for (p = array; p < array+len; p++)
scanf("%d", p);
mergesort(array, 0, len-1);
printf("The sorted array is: ");
for (p = array; p < array+len; p++) {
printf("%d", *p);
if (p < array + len - 1)
printf(" ");
}
printf(" ");
return 0;
}

void mergesort(int* array, int lower, int upper) {
if (lower < upper) {
int middle = (lower + upper) / 2;
mergesort(array, lower, middle);
mergesort(array, middle+1, upper);
merge(array, lower, middle, upper);
}
}
void merge(int* array, int lower, int middle, int upper) {
int len_left = middle - lower + 1;
int len_right = upper - middle;
int *left, *right;
int *p, *q, *r;
left = malloc(sizeof(int)* len_left);
if (left == NULL) {
printf("out of memory ");
exit(EXIT_FAILURE);
}
right = malloc(sizeof(int)* len_right);
if (right == NULL) {
printf("out of memory ");
exit(EXIT_FAILURE);
}
for (p = left, r = array + lower; p < left + len_left; p++, r++)
*p = *r;
for (q = right; q < right + len_right; q++, r++)
*q = *r;
p = left;
q = right;
r = array + lower;
while (p < left + len_left && q < right + len_right) {
if (*p <= *q)
*r++ = *p++;
else
*r++ = *q++;
}
while (p < left + len_left)
*r++ = *p++;
while (q < right + len_right)
*r++ = *q++;
  }