1. created a p07 2. copied .c .h and makefile 3. renamed main.c to sort158a.c 4. modified the header title 5. updated the make file to: #Create binary sort158: main.o merge.o mergesort.o wrt.o gcc -o sort158 main.o merge.o mergesort.o wrt.o -lm #Create object file for main.c main.o: main.c mergesort.h gcc -c main.c #Create object file for merge.c merge.o: merge.c mergesort.h gcc -c merge.c #Create object file for mergesort.c mergesort.o: mergesort.c mergesort.h gcc -c mergesort.c wrt.o: wrt.c gcc -c wrt.c #Delete the all of the object files clean: rm *.o sort158 #Create object file for wrt.c 6. Error: The makefile wont compile 7. Error: I need to make the files to compile with eachother sort158a.c (main.c) #include "mergesort.h" int main(void) { int sz, key[] = { 4, 3, 1, 67, 55, 8, 0, 4, -5, 37, 7, 4, 2, 9, 1, -1 }; int n = sizeof(key) / sizeof(int); /* the size of key [] */ int i; /*remove first 4 elements from key [] */ for(i = 4; i < n; i++) { key[ i - 4] = key[i]; } sz = n - 4; /* Update the size of key [] */ wrt(key, sz); /* Print the contents of the orginal array */ mergesort(key, sz); /* Sort the array using mergesort */ printf("After mergesort:\n"); /*prints "After mergesort:"*/ wrt(key, sz); // Print the contents of the sorted array /* Restore first 3 elements in key[] */ key[0] = 4; key[1] = 3; key[2] = 1; key[3] = 67; sz = n; return 0; } Merge.c #include "mergesort.h" void merge(int a[], int b[], int c[], int m, int n) { int i = 0, j = 0, k = 0; /* Loop through both arrays and compare their elements to eachother */ while (i < m && j < n) if (a[i] < b[j]) c[k++] = a[i++]; else c[k++] = b[j++]; /* If there are any remaining elements in array b[]. copy them to array c[]. */ while (i < m) /* pick up any remainder */ c[k++] = a[i++]; /* If there are any remaining elements in array a[], copy them to array c[]. */ while (j < n) c[k++] = b[j++]; } mergesort.h #include "mergesort.h" void mergesort(int key[], int n) { int j, k, m, *w; // Find the largest power of 2 less than or equal to n for (m = 1; m < n; m *= 2) /* m is a power of 2 */ ; // Check if n is a power of 2, if not exit with error message if (n < m) { printf("ERROR: Array size not a power of 2 - bye!\n"); exit(1); } w = calloc(n, sizeof(int)); /* allocate workspace */ assert(w != NULL); /* check that calloc() worked */ //Sort the array using mergesort for (k = 1; k < n; k *= 2) { for (j = 0; j < n - k; j += 2 * k) /* merge two subarrays of key [] into a subarray of w[]. */ merge(key + j, key + j + k, w + j, k, k); for (j = 0; j < n; j++) key[j] = w[j]; /* write W back into key */ } free (w); /*free the workspace*/ } Mergesort.h #include #include #include // This function merges two sorted arrys a and b into a sorted array c. // paterameters: a - c sorts its array. m: is the elements in a n: is the number of elements in b void merge(int a[], int b[], int c[], int m, int n); //This function sorts an array of integers using the merge sort algorithm //key: the array of integers to be sorted //n: the number of elements in the array void mergesort(int key[], int n); //This function writes an array of integers //key: the array of integers to be written //sz: the number of elements in the array void wrt(int key [], int sz); wrt.c
1. created a p07
2. copied .c .h and makefile
3. renamed main.c to sort158a.c
4. modified the header title
5. updated the make file to:
#Create binary
sort158: main.o merge.o mergesort.o wrt.o
gcc -o sort158 main.o merge.o mergesort.o wrt.o -lm
#Create object file for main.c
main.o: main.c mergesort.h
gcc -c main.c
#Create object file for merge.c
merge.o: merge.c mergesort.h
gcc -c merge.c
#Create object file for mergesort.c
mergesort.o: mergesort.c mergesort.h
gcc -c mergesort.c
wrt.o: wrt.c
gcc -c wrt.c
#Delete the all of the object files
clean:
rm *.o sort158
#Create object file for wrt.c
6. Error: The makefile wont compile
7. Error: I need to make the files to compile with eachother
sort158a.c (main.c)
#include "mergesort.h"
int main(void)
{
int sz, key[] = { 4, 3, 1, 67, 55, 8, 0, 4,
-5, 37, 7, 4, 2, 9, 1, -1 };
int n = sizeof(key) / sizeof(int); /* the size of key [] */
int i;
/*remove first 4 elements from key [] */
for(i = 4; i < n; i++) {
key[ i - 4] = key[i];
}
sz = n - 4; /* Update the size of key [] */
wrt(key, sz); /* Print the contents of the orginal array */
mergesort(key, sz); /* Sort the array using mergesort */
printf("After mergesort:\n"); /*prints "After mergesort:"*/
wrt(key, sz); // Print the contents of the sorted array
/* Restore first 3 elements in key[] */
key[0] = 4;
key[1] = 3;
key[2] = 1;
key[3] = 67;
sz = n;
return 0;
}
Merge.c
#include "mergesort.h"
void merge(int a[], int b[], int c[], int m, int n)
{
int i = 0, j = 0, k = 0;
/* Loop through both arrays and compare their elements to eachother */
while (i < m && j < n)
if (a[i] < b[j])
c[k++] = a[i++];
else
c[k++] = b[j++];
/* If there are any remaining elements in array b[]. copy them to array c[]. */
while (i < m) /* pick up any remainder */
c[k++] = a[i++];
/* If there are any remaining elements in array a[], copy them to array c[]. */
while (j < n)
c[k++] = b[j++];
}
mergesort.h
#include "mergesort.h"
void mergesort(int key[], int n)
{
int j, k, m, *w;
// Find the largest power of 2 less than or equal to n
for (m = 1; m < n; m *= 2) /* m is a power of 2 */
;
// Check if n is a power of 2, if not exit with error message
if (n < m) {
printf("ERROR: Array size not a power of 2 - bye!\n");
exit(1);
}
w = calloc(n, sizeof(int)); /* allocate workspace */
assert(w != NULL); /* check that calloc() worked */
//Sort the array using mergesort
for (k = 1; k < n; k *= 2) {
for (j = 0; j < n - k; j += 2 * k)
/* merge two subarrays of key [] into a subarray of w[]. */
merge(key + j, key + j + k, w + j, k, k);
for (j = 0; j < n; j++)
key[j] = w[j]; /* write W back into key */
}
free (w); /*free the workspace*/
}
Mergesort.h
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
// This function merges two sorted arrys a and b into a sorted array c.
// paterameters: a - c sorts its array. m: is the elements in a n: is the number of elements in b
void merge(int a[], int b[], int c[], int m, int n);
//This function sorts an array of integers using the merge sort
//key: the array of integers to be sorted
//n: the number of elements in the array
void mergesort(int key[], int n);
//This function writes an array of integers
//key: the array of integers to be written
//sz: the number of elements in the array
void wrt(int key [], int sz);
wrt.c
Trending now
This is a popular solution!
Step by step
Solved in 5 steps