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

Merge Sort and Insertion Sort Programs Implement merge sort and insertion sort t

ID: 3872636 • Letter: M

Question

Merge Sort and Insertion Sort Programs

Implement merge sort and insertion sort to sort an array/vector of integers. Implement the algorithms in C++, name one program “mergesort” and the other “insertsort”. Your programs should be able to read inputs from a file called “data.txt” where the first value of each line is the number of integers that need to be sorted, followed by the integers.

Example values for data.txt:
4 19 2 5 11
8 1 2 3 4 5 6 1 2

The output will be written to files called “merge.out” and “insert.out”.
For the above example the output would be:
2 5 11 19
1 1 2 2 3 4 5 6

Explanation / Answer

MERGE SORT

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

FILE *fp,*fpw;

void merge(int arr[], int l, int m, int r)

{

int i, j, k;

int n1 = m - l + 1;

int n2 = r - m;

  

int L[n1], R[n2];

for (i = 0; i < n1; i++)

L[i] = arr[l + i];

for (j = 0; j < n2; j++)

R[j] = arr[m + 1+ j];

i = 0;

j = 0;

k = l;

while (i < n1 && j < n2)

{

if (L[i] <= R[j])

{

arr[k] = L[i];

i++;

}

else

{

arr[k] = R[j];

j++;

}

k++;

}

while (i < n1)

{

arr[k] = L[i];

i++;

k++;

}

while (j < n2)

{

arr[k] = R[j];

j++;

k++;

}

}

void mergeSort(int arr[], int l, int r)

{

if (l < r)

{

int m = l+(r-l)/2;

mergeSort(arr, l, m);

mergeSort(arr, m+1, r);

merge(arr, l, m, r);

}

}

void printArray(int A[], int size)

{

int i;

for (i=0; i < size; i++)

fprintf(fpw,"%d ", A[i]);

fprintf(fpw," ");

}

int main()

{

int arr[1000] = {0};

int arr_size =0;

int data;

char file1[20];

strcpy(file1,"data.txt");

  

  

fp = fopen(file1,"r+");

if (fp == NULL) // if file not opened return error

{

perror("Unable to open file");

return -1;

}

else

{

fscanf (fp, "%d", &data);   

arr[arr_size]=data;

arr_size++;

while (!feof (fp))

{  

fscanf (fp, "%d", &data);  

arr[arr_size]=data;

arr_size++;   

}

}

  

char file2[20];

strcpy(file2,"merge.out");

fpw = fopen(file2,"w");

if (fpw == NULL) // if file not opened return error

{

perror("Unable to create file");

return -1;

}

  

  

fprintf(fpw,"Given array is ");

printArray(arr, arr_size);

mergeSort(arr+1, 0, arr[0]-1);

fprintf(fpw," Sorted array Using MERGE SORT is ");

printArray(arr, arr_size);

  

  

fclose(fpw);

fpw=NULL;

fp=NULL;

  

  

return 0;

}

INSERTION SORT

#include <stdio.h>

#include <math.h>

#include<string.h>

FILE *fp,*fpw;

void insertionSort(int arr[], int n)

{

int i, key, j;

for (i = 1; i < n; i++)

{

key = arr[i];

j = i-1;

while (j >= 0 && arr[j] > key)

{

arr[j+1] = arr[j];

j = j-1;

}

arr[j+1] = key;

}

}

void printArray(int arr[], int n)

{

int i;

for (i=0; i < n; i++)

fprintf(fpw,"%d ", arr[i]);

fprintf(fpw," ");

}

int main()

{

int arr[1000] = {0};

int arr_size =0;

int data;

char file1[20];

strcpy(file1,"data.txt");

fp = fopen(file1,"r+");

if (fp == NULL) // if file not opened return error

{

perror("Unable to open file");

return -1;

}

else

{

fscanf (fp, "%d", &data);   

arr[arr_size]=data;

arr_size++;

while (!feof (fp))

{  

fscanf (fp, "%d", &data);  

arr[arr_size]=data;

arr_size++;   

}

}

  

char file2[20];

strcpy(file2,"insert.out");

fpw = fopen(file2,"w");

if (fpw == NULL) // if file not opened return error

{

perror("Unable to create file");

return -1;

}

  

fprintf(fpw,"Given array is ");

printArray(arr, arr_size);

  

  

insertionSort(arr+1, arr[0]-1);

fprintf(fpw," Sorted array Using INSERT SORT is ");

printArray(arr, arr_size);

  

  

fclose(fpw);

fpw=NULL;

fp=NULL;

return 0;

}