Exercise 1
Info
In this workshop we will study the MergeSort sorting algorithm.
#include <stdio.h>
#include <stdlib.h>
void Merge(int L[], int start, int end, int mid);
void MergeSort(int L[], int start, int end);
void printList(int L[], int size);
int main(void){
int L[] = { 5, 3, 8, 1, 6, 10, 7, 2, 4, 9 };
int L_size = sizeof(L) / sizeof(L[0]);
printf("Given list \n");
printList(L, L_size);
MergeSort(L, 0, L_size - 1);
printf("The sorted list \n");
printList(L, L_size);
return 0;
}
void Merge(int L[], int start, int end, int mid){
int i, j, k;
int n1 = mid - start + 1;
int n2 = end - mid;
int Left[n1], Right[n2];
for (i = 0; i < n1; i++)
Left[i] = L[start + i];
for (j = 0; j < n2; j++)
Right[j] = L[mid + 1 + j];
i = 0;
j = 0;
k = start;
while (i < n1 && j < n2) {
if (Left[i] <= Right[j]) {
L[k] = Left[i];
i++;
} else {
L[k] = Right[j];
j++;
}
k++;
}
while (i < n1) {
L[k] = Left[i];
i++;
k++;
}
while (j < n2) {
L[k] = Right[j];
j++;
k++;
}
}
void MergeSort(int L[], int start, int end){
/*Here goes your code as well*/
if (start < end) {
int mid = (start + end) / 2;
MergeSort(L, start, mid);
MergeSort(L, mid + 1, end);
Merge(L, start, end, mid);
}
}
void printList(int L[], int size){
int i;
for (i = 0; i < size; i++)
printf("%d ", L[i]);
printf("\n");
}