# Merge Sort

Merge Sort is a popular and efficient sorting algorithm that follows the divide and conquer approach. Here's how it works:

1. Divide: The algorithm divides the input array into two halves, then it recursively sorts the two halves. The base case for the recursion are arrays with a length of 1, which are by definition sorted.

2. Conquer (Merge): After dividing, it merges the two sorted halves to produce a sorted array. This merging of two sorted arrays is the key operation in Merge Sort.

Here's a step-by-step breakdown of the process:

1. Splitting Phase:

• If the array has more than one element, we split the array into two halves.
• This splitting continues recursively until all the sub-arrays have only one element each.
2. Merging Phase:

• Now, start combining (merging) these sub-arrays of one element each to form larger, sorted arrays.
• During each merge, the algorithm takes two sorted arrays and merges them into a single sorted array.
• This process is done by repeatedly picking the smallest element from the front of one of the two arrays and adding it to the end of the merged array.
• This step is repeated until all sub-arrays are merged into a single sorted array.

Key Points to Remember:

• Merge Sort is stable (does not change the relative order of elements with equal keys) and has a time complexity of O(n log n) in all cases (best, average, and worst).
• Its space complexity is O(n), due to the use of additional space for the temporary arrays used during the merge phase.
• It's particularly good for sorting linked lists and for large datasets where random access is not as efficient, like in external sorting.

Merge Sort is often preferred for its consistent performance (O(n log n)) regardless of the initial order of the array, unlike algorithms like Quick Sort, which can degrade to O(n^2) in the worst case. However, because of its use of extra space, it's not as space-efficient as some other sorting algorithms like Quick Sort.