askvity

How Do I Merge Sort Numbers?

Published in Sorting Algorithms 2 mins read

Merge sort is a sorting algorithm that employs a divide and conquer strategy to efficiently sort a list of numbers. Here's a breakdown of how it works:

The Divide and Conquer Approach

Merge sort operates in two primary phases:

  1. Divide: The list is recursively divided into smaller sublists until each sublist contains only one element (a list with one element is inherently sorted).
  2. Conquer (Merge): The sublists are repeatedly merged to produce new sorted sublists until there is only one sorted list remaining.

Step-by-Step Guide to Merge Sort

Let's illustrate with an example list: [38, 27, 43, 3, 9, 82, 10]

  1. Divide:

    • [38, 27, 43, 3, 9, 82, 10] is split into [38, 27, 43, 3] and [9, 82, 10]
    • [38, 27, 43, 3] is split into [38, 27] and [43, 3]
    • [9, 82, 10] is split into [9, 82] and [10]
    • [38, 27] is split into [38] and [27]
    • [43, 3] is split into [43] and [3]
    • [9, 82] is split into [9] and [82]
    • Now we have individual elements: [38], [27], [43], [3], [9], [82], [10]
  2. Conquer (Merge): This is the crucial part where we compare and combine.

    • Merge [38] and [27] to get [27, 38] (27 < 38, so 27 comes first)

    • Merge [43] and [3] to get [3, 43] (3 < 43, so 3 comes first)

    • Merge [9] and [82] to get [9, 82] (9 < 82, so 9 comes first)

    • Merge [27, 38] and [3, 43] to get [3, 27, 38, 43]

      • Compare 27 and 3; 3 comes first. [3]
      • Compare 27 and 43; 27 comes first. [3, 27]
      • Compare 38 and 43; 38 comes first. [3, 27, 38]
      • 43 is the only element left, so append it. [3, 27, 38, 43]
    • Merge [9, 82] and [10] to get [9, 10, 82]

      • Compare 9 and 10; 9 comes first. [9]
      • Compare 10 and 82; 10 comes first. [9, 10]
      • 82 is the only element left, so append it. [9, 10, 82]
    • Finally, merge [3, 27, 38, 43] and [9, 10, 82] to get [3, 9, 10, 27, 38, 43, 82]

      • Compare 3 and 9; 3 comes first. [3]
      • Compare 9 and 27; 9 comes first. [3, 9]
      • Compare 10 and 27; 10 comes first. [3, 9, 10]
      • Compare 27 and 82; 27 comes first. [3, 9, 10, 27]
      • Compare 38 and 82; 38 comes first. [3, 9, 10, 27, 38]
      • Compare 43 and 82; 43 comes first. [3, 9, 10, 27, 38, 43]
      • 82 is the only element left, so append it. [3, 9, 10, 27, 38, 43, 82]

Pseudocode

function mergeSort(list)
  if list.length <= 1
    return list

  middle = list.length / 2 (rounded down)
  left = sublist of list from 0 to middle - 1
  right = sublist of list from middle to list.length - 1

  left = mergeSort(left)
  right = mergeSort(right)

  return merge(left, right)

function merge(left, right)
  result = []
  while left.length > 0 and right.length > 0
    if left[0] <= right[0]
      result.append(left.removeFirst())
    else
      result.append(right.removeFirst())

  // Add any remaining elements from left or right
  result.append(all elements of left)
  result.append(all elements of right)
  return result

Benefits of Merge Sort

  • Stable Sort: Maintains the relative order of equal elements.
  • Guaranteed Performance: Has a time complexity of O(n log n) in all cases (best, average, and worst).
  • Well-Suited for Large Datasets: Efficient for sorting large amounts of data.

Considerations

  • Space Complexity: Merge sort requires extra space to store the sublists during the merging process (O(n) space complexity). This can be a drawback for memory-constrained environments.
  • Not In-Place: It's not an in-place sorting algorithm, meaning it requires additional memory.

Merge sort provides an efficient and predictable way to sort numbers. Its divide and conquer approach makes it a powerful tool for handling various sorting tasks.

Related Articles