1
0
mirror of https://gitlab.com/magicalsoup/Highschool.git synced 2025-01-23 16:11:46 -05:00
highschool/Grade 10/Computer Science/ICS4U1/Sorting Methods/Merge Sort.md
2019-10-25 16:24:55 +00:00

2.2 KiB

Introduction

Merge sort is a comparison type sort that has an effective use of recursion and the divide and conquer algorithm.
Merge sort sorts in \(`O(N \log N)`\) time and uses \(`O(N \log N)`\) space.
We will explore the pros and cons of this sort the proofs on its time and space complexity and the implementation and algorithm of this sorting method.

Abstract: Given two sorted arrays \(`a_{lo}`\) to \(`a_{mid}`\) and \(`a_{mid+1}`\) to \(`a_{hi}`\), replace with sorted subarray \(`a_{lo}`\) to \(`a_{hi}`\).

Basic Algorithm

  • Divide array into 2 halves
  • Recursively sort each half
  • Merge the two halfs.
def mergesort(left, right, array[]):
    if left <= right:
        mid = (left + right) / 2
        mergesort(left, mid, array[])
        mergesort(mid+1, right, array[])
        mergehalves(left, mid, right, array[])

Running Time Analysis

  • Latop computer can run close to \(`10^8`\) per second.
  • Supercomputer can execute \(`10^{12}`\) compares per second.

Insertion Sort \(`(N^2)`\)

computer thousand \(`(10^3)`\) million \(`(10^6)`\) billion \(`(10^9)`\)
home instant 2.8 hours 317 years
super instant 1 second 1 week

Merge Sort \(`(N \log N)`\)

computer thousand \(`(10^3)`\) million \(`(10^6)`\) billion \(`(10^9)`\)
home instant 1 second 18 min
super instant instant instant

Proof Sketch

Proposition Merge sort uses \(`\le N \log N`\) compares to sort an array of length \(`N`\).

Proof Sketch The number of compares \(`C(N)`\) to mergesort an array of length \(`N`\) satisfies the recurrence:

C(N) \le C(\lceil N/2 \rceil) + C(\lfloor N/2 \rfloor) + N \text{ for } N \gt 1, \text{ with } C(1) = 0.

Divide and conquer recurrence induction proof

Proposition. If \(`D(N)`\) satisfies \(`D(N)=2D(N/2) + N`\) for \(`N \gt 1`\), with \(`D(1) = 0,`\) then \(`D(N) = N \log N`\).

Proof [assuming \(`N`\) is a power of \(`2`\)] - Base case: \(`N = 1`\) - Inductive hypothesis: \(`D(N) = N \log N`\). - Goal: show that \(`D(2N) = (2N) = \log (2N)`\)

\(`D(2N) = 2D(N) + 2N`\)
\(`\quad = 2 N \log N + 2N`\)
\(`\quad = 2 N (log (2N) - 1) + 2N`\)
\(`\quad = 2 N \log (2N)`\)

Resources