Sorting Algorithm: Merge Sort

Sorting Algorithm: Merge Sort

Are you looking to improve your understanding of sorting algorithms in JavaScript? Do you want to learn how to implement the Merge Sort algorithm? Look no further! In this article, we will dive into the world of Merge Sort, a popular sorting algorithm that follows the divide and conquer approach.

What is Merge Sort?

Merge Sort is a comparison-based sorting algorithm that divides the input array into two halves, recursively sorts them, and then merges the two sorted halves into a single sorted array. It is efficient and stable, meaning that it maintains the relative order of elements with equal values.

How does Merge Sort work?

Merge Sort follows a simple process:

  1. Divide: The input array is divided into two halves, until each half contains only one element or is empty.
  2. Conquer: Recursively sort each half of the array.
  3. Merge: Merge the sorted halves back together, creating a single sorted array.

Let’s take a deeper look at the steps involved.

1. Divide

The first step of Merge Sort is to divide the input array into two halves. This process continues until each half contains only one element or is empty. To divide the array, we find the middle index and split the array into two halves.

function mergeSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }

  const middle = Math.floor(arr.length / 2);
  const left = arr.slice(0, middle);
  const right = arr.slice(middle);

  // Recursive call to divide
  const sortedLeft = mergeSort(left);
  const sortedRight = mergeSort(right);

  // ...
}

2. Conquer

In the conquer step, we recursively sort each half of the array. This is achieved by calling the mergeSort function on both halves.

// Recursive call to conquer
const sortedLeft = mergeSort(left);
const sortedRight = mergeSort(right);

3. Merge

Finally, in the merge step, we merge the two sorted halves back together, creating a single sorted array. We compare the elements from the left and right halves, taking the smallest element each time, and adding it to the merged array.

// Merge two sorted arrays
function merge(left, right) {
  const merged = [];
  let leftIdx = 0;
  let rightIdx = 0;

  while (leftIdx < left.length && rightIdx < right.length) {
    if (left[leftIdx] < right[rightIdx]) {
      merged.push(left[leftIdx]);
      leftIdx++;
    } else {
      merged.push(right[rightIdx]);
      rightIdx++;
    }
  }

  // Add remaining elements
  return merged.concat(left.slice(leftIdx)).concat(right.slice(rightIdx));
}

// Merge the sorted halves
const mergedArray = merge(sortedLeft, sortedRight);

Complexity Analysis

The time complexity of Merge Sort is O(n log n), where n is the number of elements in the array. This makes Merge Sort an efficient algorithm for sorting large datasets. The space complexity is O(n), as it requires additional space to store the merged array.

Conclusion

Merge Sort is a powerful sorting algorithm that can be used to efficiently sort arrays in JavaScript. By following the divide and conquer approach, we can break down the problem into smaller subproblems and solve them recursively. Implementing Merge Sort will not only enhance your knowledge of sorting algorithms but also improve your problem-solving skills. So, why not give it a try in your next coding challenge or interview question? Happy coding!

References: