Skip to content

Commit 85b7e93

Browse files
authored
Merge sort
This is the code of Merge sort
1 parent bed4885 commit 85b7e93

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

Merge sort.cpp

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#include <iostream>
2+
using namespace std;
3+
4+
5+
void merge(int array[], int const left, int const mid,
6+
int const right)
7+
{
8+
auto const subArrayOne = mid - left + 1;
9+
auto const subArrayTwo = right - mid;
10+
11+
12+
auto *leftArray = new int[subArrayOne],
13+
*rightArray = new int[subArrayTwo];
14+
15+
16+
for (auto i = 0; i < subArrayOne; i++)
17+
leftArray[i] = array[left + i];
18+
for (auto j = 0; j < subArrayTwo; j++)
19+
rightArray[j] = array[mid + 1 + j];
20+
21+
auto indexOfSubArrayOne
22+
= 0,
23+
indexOfSubArrayTwo
24+
= 0;
25+
int indexOfMergedArray
26+
= left;
27+
while (indexOfSubArrayOne < subArrayOne
28+
&& indexOfSubArrayTwo < subArrayTwo) {
29+
if (leftArray[indexOfSubArrayOne]
30+
<= rightArray[indexOfSubArrayTwo]) {
31+
array[indexOfMergedArray]
32+
= leftArray[indexOfSubArrayOne];
33+
indexOfSubArrayOne++;
34+
}
35+
else {
36+
array[indexOfMergedArray]
37+
= rightArray[indexOfSubArrayTwo];
38+
indexOfSubArrayTwo++;
39+
}
40+
indexOfMergedArray++;
41+
}
42+
43+
while (indexOfSubArrayOne < subArrayOne) {
44+
array[indexOfMergedArray]
45+
= leftArray[indexOfSubArrayOne];
46+
indexOfSubArrayOne++;
47+
indexOfMergedArray++;
48+
}
49+
50+
while (indexOfSubArrayTwo < subArrayTwo) {
51+
array[indexOfMergedArray]
52+
= rightArray[indexOfSubArrayTwo];
53+
indexOfSubArrayTwo++;
54+
indexOfMergedArray++;
55+
}
56+
delete[] leftArray;
57+
delete[] rightArray;
58+
}
59+
60+
61+
void mergeSort(int array[], int const begin, int const end)
62+
{
63+
if (begin >= end)
64+
return;
65+
auto mid = begin + (end - begin) / 2;
66+
mergeSort(array, begin, mid);
67+
mergeSort(array, mid + 1, end);
68+
merge(array, begin, mid, end);
69+
}
70+
71+
72+
void printArray(int A[], int size)
73+
{
74+
for (auto i = 0; i < size; i++)
75+
cout << A[i] << " ";
76+
}
77+
78+
79+
int main()
80+
{
81+
int arr[] = { 12, 11, 13, 5, 6, 7 };
82+
auto arr_size = sizeof(arr) / sizeof(arr[0]);
83+
84+
cout << "Given array is \n";
85+
printArray(arr, arr_size);
86+
87+
mergeSort(arr, 0, arr_size - 1);
88+
89+
cout << "\nSorted array is \n";
90+
printArray(arr, arr_size);
91+
return 0;
92+
}

0 commit comments

Comments
 (0)