Lectures 1-2 - Introduction - InsertionSort - MergeSort
Lectures 1-2 - Introduction - InsertionSort - MergeSort
Introduction to Algorithms
Da Nang University of Science and Technology
IT Faculty Copyright
Dang2000-2022
Thien Binh
IT Faculty
1/28
Algorithm
Example: Sorting
Input: A sequence of n numbers <a1, a2, ..., an>
Output: A permutation (reordering) <b1, b2, ..., bn> of the
input sequence such that 𝑏1 ≤ 𝑏2 ≤ ⋯ ≤ 𝑏𝑛
Instance: <6, 4, 3, 7, 1, 4>
Insertion Sort
In-place sorting: Uses only a fixed amount of storage
beyond that needed for the data
Example:
643714 46 3714
^* ^ *
346714 34 6714
* ^ *
134674 13 4467
^ *
Example: 6 4 3 7 1 4
6 4 3 7 1 4
Pseudocode:
INSERTION-SORT(A) /* A is an array of numbers */
1 for j 2 to length[A]
2 key A[j]
3 /* insert A[j] into the sorted sequence A[1 .. j-1] */
4 ij-1
5 while i > 0 and A[i] > key
6 A[i+1] A[i]
7 ii-1
8 A[i+1] key
Example:
5 2 4 6 1 3
Video Content
An illustration of Insertion Sort with Romanian folk dance.
Note: tj is the number of times the while loop test in line 5 is executed for the value of j.
IT Faculty Dang Thien Binh 12/28
Analyzing Algorithm
Best case
Array is already sorted, so tj = 1 for j = 2, 3, ..., n.
T(n) = c1n + c2(n - 1) + c4(n - 1) + c5(n - 1) + c8(n - 1)
= (c1 + c2 + c4 + c5 + c8)n - (c2 + c4 + c5 + c8)
= an + b (linear in n)
Worst case
Average Case?
Concentrate on worst-case running time
Provides the upper bound
Occurs often
Average case is often as bad as the worst case
Order of Growth
The order of a running-time function is the fastest growing
term, discarding constant factors
Insertion sort
Best case: an + b → (n)
Worst case: an2 + bn + c → (n2)
Incremental design
Iterative
Example: insertion sort
Divide-and-conquer algorithm
Recursive
Example: merge sort
Three steps in the divide-and-conquer paradigm
Divide the problem into smaller subproblems
Conquer subproblems by solving them recursively
Combine solutions of subproblems
Merge Sort
Divide the n-element sequence into two subsequences of n/2
elements each
Conquer (sort) the two subsequences recursively using merge
sort
Combine (merge) the two sorted subsequences to produce
the sorted answer
Note: Recursion bottoms out when only one element
to be sorted
5 1 4 2 10 3 9 15
5 1 4 2 10 3 9 15
5 1 4 2 10 3 9 15
5 1 4 2 10 3 9 15
1 2 3 4 5 9 10 15
1 2 4 5 3 9 10 15
1 5 2 4 3 10 9 15
5 1 4 2 10 3 9 15
1 13 24 26 2 15 27 38
1 13 24 26 2 15 27 38 1
1 13 24 26 2 15 27 38 1 2
1 13 24 26 2 15 27 38 1 2 13
etc.
MERGE_SORT(A, p, r)
1 if p < r
2 then q ( p + r ) / 2
3 MERGE_SORT(A, p, q)
4 MERGE_SORT(A, q+1, r)
5 MERGE(A, p, q, r)
Video Content
An illustration of Merge Sort with Transylvanian-saxon (German)
folk dance.
Note:
The MERGE_SORT(A, p, r) sorts the elements in the subarray
A[p .. r]
If p >= r, the subarray has at most one element and is therefore
already sorted
The procedure MERGE(A, p, q, r), where p <= q < r, merges two
already sorted subarrays A[p ..q] and A[q+1 .. r]. It takes (n)
time
To sort an array A[1 .. n], we call MERGE_SORT(A, 1, n)
IT Faculty Copyright
Dang2000-2022
Thien BinhIT Faculty
29/28