You are on page 1of 4

Experiment – 3

Aim: To implement Merge Sort algorithm using array as a data structure and analyse its
time complexity.

MERGE SORT
Code:
#include <iostream>
#include <chrono>
using namespace std;
void print_array(int *arr, int size)
{
for (int i = 0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
void merge(int *arr1, int si, int mid, int ei)
{
int i, j, k, arr2[20];
i = si;
j = mid + 1;
k = si;
while (i <= mid && j <= ei)
{
if (arr1[i] < arr1[j])
{
arr2[k] = arr1[i];
k++;
i++;
}
else
{
arr2[k] = arr1[j];
k++;
j++;
}
}
while (i <= mid)
{
arr2[k] = arr1[i];
k++;
i++;
}
while (j <= ei)
{
arr2[k] = arr1[j];
k++;
j++;
}
for (int i = si; i <= ei; i++)
arr1[i] = arr2[i];
}
void merge_sort(int *arr, int si, int ei)
{
if (si < ei)
{
int mid = (si + ei) / 2;
merge_sort(arr, si, mid);
merge_sort(arr, mid + 1, ei);
merge(arr, si, mid, ei);
}
}
int main()
{
int size;
cout << "Enter size of array: ";
cin >> size;
int *arr = new int[size];
cout << "Enter elements of the array: ";
for (int i = 0; i < size; i++)
cin >> arr[i];
cout << "\nArray before sorting: ";
print_array(arr, size);
int startIndex = 0;
int endIndex = size - 1;
auto start = chrono::steady_clock::now();
merge_sort(arr, startIndex, endIndex);
auto end = chrono::steady_clock::now();
cout << "Array after sorting: ";
print_array(arr, size);
cout << endl
<< "Elapsed time in nanoseconds: "
<< chrono::duration_cast<chrono::nanoseconds>(end -
start).count() << endl
<< endl;
return 0;
}
Output:

Worst case
Best case

You might also like