0% found this document useful (0 votes)
92 views18 pages

Merge Sort

Merge sort is a sorting algorithm that uses a divide and conquer approach. It divides the input array into two halves, recursively sorts the halves, and then merges the sorted halves into a single sorted output array. The overall runtime of merge sort is O(n log n), making it an efficient sorting algorithm for large data sets.

Uploaded by

Erwin Acedillo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
92 views18 pages

Merge Sort

Merge sort is a sorting algorithm that uses a divide and conquer approach. It divides the input array into two halves, recursively sorts the halves, and then merges the sorted halves into a single sorted output array. The overall runtime of merge sort is O(n log n), making it an efficient sorting algorithm for large data sets.

Uploaded by

Erwin Acedillo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 18

Merge Sort

7 29 4  2 4 7 9

72  2 7 94  4 9

77 22 99 44

Merge Sort 1
Outline and Reading
Divide-and-conquer paradigm (§4.1.1)
Merge-sort (§4.1.1)
 Algorithm
 Merging two sorted sequences
 Merge-sort tree
 Execution example
 Analysis
Generic merging and set operations (§4.2.1)
Summary of sorting algorithms (§4.2.1)

Merge Sort 2
Divide-and-Conquer
Divide-and conquer is a Merge-sort is a sorting
general algorithm design algorithm based on the
paradigm: divide-and-conquer
 Divide: divide the input data paradigm
S in two disjoint subsets S1 Like heap-sort
and S2  It uses a comparator
 Recur: solve the  It has O(n log n) running
subproblems associated time
with S1 and S2
Unlike heap-sort
 Conquer: combine the
solutions for S1 and S2 into a
 It does not use an
solution for S auxiliary priority queue
 It accesses data in a
The base case for the
sequential manner
recursion are subproblems of (suitable to sort data on a
size 0 or 1 disk)

Merge Sort 3
Merge-Sort
Merge-sort on an input Algorithm mergeSort(S, C)
sequence S with n Input sequence S with n
elements consists of elements, comparator C
three steps: Output sequence S sorted
 Divide: partition S into according to C
two sequences S1 and S2 if S.size() > 1
of about n2 elements (S1, S2)  partition(S, n/2)
each mergeSort(S1, C)
 Recur: recursively sort S1
mergeSort(S2, C)
and S2
 Conquer: merge S1 and S  merge(S1, S2)
S2 into a unique sorted
sequence

Merge Sort 4
Merging Two Sorted Sequences
The conquer step of Algorithm merge(A, B)
merge-sort consists Input sequences A and B with
of merging two n2 elements each
sorted sequences A Output sorted sequence of A  B
and B into a sorted
sequence S S  empty sequence
containing the union while A.isEmpty() B.isEmpty()
of the elements of A if A.first().element() < B.first().element()
and B S.insertLast(A.remove(A.first()))
Merging two sorted else
sequences, each S.insertLast(B.remove(B.first()))
with n2 elements while A.isEmpty()
and implemented by S.insertLast(A.remove(A.first()))
means of a doubly while B.isEmpty()
linked list, takes S.insertLast(B.remove(B.first()))
O(n) time return S

Merge Sort 5
Merge-Sort Tree
An execution of merge-sort is depicted by a binary tree
 each node represents a recursive call of merge-sort and stores
 unsorted sequence before the execution and its partition
 sorted sequence at the end of the execution
 the root is the initial call
 the leaves are calls on subsequences of size 0 or 1

7 2  9 4  2 4 7 9

7  2  2 7 9  4  4 9

77 22 99 44


Merge Sort 6
Execution Example
Partition
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 2 9 4  2 4 7 9 3 8 6 1  1 3 8 6

7 2  2 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 7
Execution Example (cont.)
Recursive call, partition
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 29 4 2 4 7 9 3 8 6 1  1 3 8 6

7 2  2 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 8
Execution Example (cont.)
Recursive call, partition
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 29 4 2 4 7 9 3 8 6 1  1 3 8 6

722 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 9
Execution Example (cont.)
Recursive call, base case
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 29 4 2 4 7 9 3 8 6 1  1 3 8 6

722 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 10
Execution Example (cont.)
Recursive call, base case
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 29 4 2 4 7 9 3 8 6 1  1 3 8 6

722 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 11
Execution Example (cont.)
Merge
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 29 4 2 4 7 9 3 8 6 1  1 3 8 6

722 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 12
Execution Example (cont.)
Recursive call, …, base case, merge
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 29 4 2 4 7 9 3 8 6 1  1 3 8 6

722 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 13
Execution Example (cont.)
Merge
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 29 4 2 4 7 9 3 8 6 1  1 3 8 6

722 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 14
Execution Example (cont.)
Recursive call, …, merge, merge
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 29 4 2 4 7 9 3 8 6 1  1 3 6 8

722 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 15
Execution Example (cont.)
Merge
7 2 9 43 8 6 1  1 2 3 4 6 7 8 9

7 29 4 2 4 7 9 3 8 6 1  1 3 6 8

722 7 9 4  4 9 3 8  3 8 6 1  1 6

77 22 99 44 33 88 66 11

Merge Sort 16
Analysis of Merge-Sort
The height h of the merge-sort tree is O(log n)
 at each recursive call we divide in half the sequence,
The overall amount or work done at the nodes of depth i is O(n)
 we partition and merge 2i sequences of size n2i
 we make 2i1 recursive calls
Thus, the total running time of merge-sort is O(n log n)

depth #seqs size


0 1 n

1 2 n2

i 2i n2i

… … …

Merge Sort 17
Summary of Sorting Algorithms
Algorithm Time Notes
slow
selection-sort O(n2) in-place
for small data sets (< 1K)
slow
insertion-sort O(n2) in-place
for small data sets (< 1K)
fast
heap-sort O(n log n) in-place
for large data sets (1K — 1M)
fast
merge-sort O(n log n) sequential data access
for huge data sets (> 1M)
Merge Sort 18

You might also like