sorting - Đại học quốc gia hà...
TRANSCRIPT
![Page 1: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/1.jpg)
Sorting
Data structures and Algorithms
Acknowledgement: These slides are adapted from slides provided with Data Structures and Algorithms in C++
Goodrich, Tamassia and Mount (Wiley, 2004)
![Page 2: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/2.jpg)
Sorting 2
Outline
Bubble Sort
Insertion Sort
Merge Sort
Quick Sort
![Page 3: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/3.jpg)
Sorting 3
Bubble Sort
Algorithm
1. Compare each pair of adjacent elements from the beginning of an array and, if they are in reversed order, swap them.
2. If at least one swap has been done, repeat step 1.
Reference: http://www.algolist.net/Algorithms/Sorting/Bubble_sort
![Page 4: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/4.jpg)
1st pass
2nd pass
3rd pass
4th pass
![Page 5: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/5.jpg)
Sorting 5
Bubble Sort pseudocode
Algorithm bubbleSort(S, C)
Input sequence S with n elements, comparator C
Output sequence S sorted according to C
do
swapped ← false
for each i in 1 to length(S) – 1 inclusive do:
if S[i - 1] > S[i] according to C then
swap(S[i - 1], S[i])
swapped ← true
while swapped
![Page 6: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/6.jpg)
Sorting 6
For pass in 1 ... n-1:
for j in 1..n-pass
if S[j-1]>S[j]:
swap(s[j-1], s[j])
For i in 1 ... n-1:
for j in 1..n-i
if S[j-1]>S[j]:
swap(s[j-1], s[j])
![Page 7: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/7.jpg)
Sorting 7
Bubble Sort performance
Worst-case & average-case: O(n2)
Best-case: (over an already-sorted list) :O(n)
![Page 8: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/8.jpg)
Sorting 8
Insertion Sort
Reference: http://www.algolist.net/Algorithms/Sorting/Insertion_sort
![Page 9: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/9.jpg)
1st pass
2nd pass
3rd pass
4th pass
![Page 10: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/10.jpg)
Sorting 10
Insertion Sort pseudocode
Algorithm insertionSort(S, C)
Input sequence S with n elements, comparator C
Output sequence S sorted according to C
for i from 1 to length(S) do
j ← i
while j > 0 && S[j - 1] > S[j] then
swap(S[j - 1], S[j])
j--
![Page 11: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/11.jpg)
Sorting 11
Insertion Sort performance
Worst-case & average-case: O(n2)
Best-case: (over an already-sorted list) :O(n)
adaptive (performance adapts to the initial order of elements);
stable (insertion sort retains relative order of the same elements);
in-place (requires constant amount of additional space);
online (new elements can be added during the sort).
![Page 12: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/12.jpg)
Sorting 12
Divide-and-ConquerDivide-and conquer is a general algorithm design paradigm:
� Divide: divide the input data Sin two or more disjoint subsets S1, S2, …
� Recur: solve thesubproblems recursively
� Conquer: combine the solutions for S1, S2, …, into a solution for S
The base case for the recursion are subproblems of constant size
Analysis can be done using recurrence equations
![Page 13: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/13.jpg)
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
![Page 14: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/14.jpg)
Sorting 14
Merge-Sort
Merge-sort on an input sequence S with n elements consists of three steps:
� Divide: partition S into two sequences S1 and S2 of about n/2 elements each
� Recur: recursively sort S1
and S2
� Conquer: merge S1 and S2
into a unique sorted sequence
Algorithm mergeSort(S, C)
Input sequence S with nelements, comparator C
Output sequence S sorted
according to C
if S.size() > 1
(S1, S2) ← partition(S, n/2)
mergeSort(S1, C)
mergeSort(S2, C)
S ← merge(S1, S2)
![Page 15: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/15.jpg)
Sorting 15
Merging Two Sorted SequencesThe conquer step of merge-sort consists of merging two sorted sequences A and B into a sorted sequence S
containing the union of the elements of A and B
Merging two sorted sequences, each with n/2 elements and implemented by means of a doubly linked list, takes O(n) time
Algorithm merge(A, B)
Input sequences A and B withn/2 elements each
Output sorted sequence of A ∪ B
S ← empty sequence
while ¬A.isEmpty() ∧∧∧∧ ¬B.isEmpty()
if A.first().element() < B.first().element()
S.insertLast(A.remove(A.first()))
else
S.insertLast(B.remove(B.first()))
while ¬A.isEmpty()S.insertLast(A.remove(A.first()))
while ¬B.isEmpty()S.insertLast(B.remove(B.first()))
return S
![Page 16: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/16.jpg)
Sorting 16
Merge-Sort TreeAn 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
![Page 17: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/17.jpg)
Sorting 17
Execution Example
Partition
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
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
![Page 18: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/18.jpg)
Sorting 18
Execution Example (cont.)
Recursive call, partition
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
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
![Page 19: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/19.jpg)
Sorting 19
Execution Example (cont.)
Recursive call, partition
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
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
![Page 20: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/20.jpg)
Sorting 20
Execution Example (cont.)
Recursive call, base case
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
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
![Page 21: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/21.jpg)
Sorting 21
Execution Example (cont.)
Recursive call, base case
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
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
![Page 22: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/22.jpg)
Sorting 22
Execution Example (cont.)
Merge
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
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
![Page 23: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/23.jpg)
Sorting 23
Execution Example (cont.)
Recursive call, …, base case, merge
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 3 →→→→ 3 8 →→→→ 8 6 →→→→ 6 1 →→→→ 1
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
9 →→→→ 9 4 →→→→ 4
![Page 24: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/24.jpg)
Sorting 24
Execution Example (cont.)
Merge
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
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
![Page 25: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/25.jpg)
Sorting 25
Execution Example (cont.)
Recursive call, …, merge, merge
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
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
![Page 26: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/26.jpg)
Sorting 26
Execution Example (cont.)
Merge
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
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
![Page 27: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/27.jpg)
Sorting 27
Analysis of Merge-SortThe 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)
size#seqsdepth
………
n////2i2ii
n////221
n10
![Page 28: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/28.jpg)
Sorting 28
Analysis of Merge-Sort using Recurrence Relations
• Merge(S1,S2) takes time O(n), where n is the size of S1 and S2
• T(n) = 2T(n/2) + O(n)
• Solving, get T(n)=O(nlogn)
Algorithm mergeSort(S, C)
Input sequence S with nelements, comparator C
Output sequence S sorted
according to C
if S.size() > 1
(S1, S2) ← partition(S, n/2)
mergeSort(S1, C)
mergeSort(S2, C)
S ← merge(S1, S2)
![Page 29: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/29.jpg)
Quick-Sort
7 4 9 6 2 →→→→ 2 4 6 7 9
4 2 →→→→ 2 4 7 9 →→→→ 7 9
2 →→→→ 2 9 →→→→ 9
![Page 30: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/30.jpg)
Sorting 30
Quick-Sort
Quick-sort is a randomized sorting algorithm based on the divide-and-conquer paradigm:
� Divide: pick a random element x (called pivot) and partition S into
� L elements less than x
� E elements equal x
� G elements greater than x
� Recur: sort L and G
� Conquer: join L, E and G
x
x
L GE
x
![Page 31: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/31.jpg)
Sorting 31
PartitionWe partition an input sequence as follows:
� We remove, in turn, each element y from S and
� We insert y into L, E or G,depending on the result of the comparison with the pivot x
Each insertion and removal is at the beginning or at the end of a sequence, and hence takes O(1) time
Thus, the partition step of quick-sort takes O(n) time
Algorithm partition(S, p)
Input sequence S, position p of pivot
Output subsequences L, E, G of the elements of S less than, equal to,or greater than the pivot, resp.
L, E, G ← empty sequences
x ← S.remove(p)
while ¬S.isEmpty()
y ← S.remove(S.first())
if y < x
L.insertLast(y)
else if y = x
E.insertLast(y)
else { y > x }
G.insertLast(y)
return L, E, G
![Page 32: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/32.jpg)
Sorting 32
Quick-Sort TreeAn execution of quick-sort is depicted by a binary tree
� Each node represents a recursive call of quick-sort and stores
� Unsorted sequence before the execution and its pivot
� 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 4 9 6 2 →→→→ 2 4 6 7 9
4 2 →→→→ 2 4 7 9 →→→→ 7 9
2 →→→→ 2 9 →→→→ 9
![Page 33: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/33.jpg)
Sorting 33
Execution Example
Pivot selection
7 2 9 4 →→→→ 2 4 7 9
2 →→→→ 2
7 2 9 4 3 7 6 1 →→→→ 1 2 3 4 6 7 8 9
3 8 6 1 →→→→ 1 3 8 6
3 →→→→ 3 8 →→→→ 89 4 →→→→ 4 9
9 →→→→ 9 4 →→→→ 4
![Page 34: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/34.jpg)
Sorting 34
Execution Example (cont.)
Partition, recursive call, pivot selection
2 4 3 1 →→→→ 2 4 7 9
9 4 →→→→ 4 9
9 →→→→ 9 4 →→→→ 4
7 2 9 4 3 7 6 1 →→→→ 1 2 3 4 6 7 8 9
3 8 6 1 →→→→ 1 3 8 6
3 →→→→ 3 8 →→→→ 82 →→→→ 2
![Page 35: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/35.jpg)
Sorting 35
Execution Example (cont.)
Partition, recursive call, base case
2 4 3 1 →→→→→→→→ 2 4 7
1 →→→→ 1 9 4 →→→→ 4 9
9 →→→→ 9 4 →→→→ 4
7 2 9 4 3 7 6 1 →→→→ →→→→ 1 2 3 4 6 7 8 9
3 8 6 1 →→→→ 1 3 8 6
3 →→→→ 3 8 →→→→ 8
![Page 36: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/36.jpg)
Sorting 36
Execution Example (cont.)
Recursive call, …, base case, join
3 8 6 1 →→→→ 1 3 8 6
3 →→→→ 3 8 →→→→ 8
7 2 9 4 3 7 6 1 →→→→ 1 2 3 4 6 7 8 9
2 4 3 1 →→→→ 1 2 3 4
1 →→→→ 1 4 3 →→→→ 3 4
9 →→→→ 9 4 →→→→ 4
![Page 37: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/37.jpg)
Sorting 37
Execution Example (cont.)
Recursive call, pivot selection
7 9 7 1 →→→→ 1 3 8 6
8 →→→→ 8
7 2 9 4 3 7 6 1 →→→→ 1 2 3 4 6 7 8 9
2 4 3 1 →→→→ 1 2 3 4
1 →→→→ 1 4 3 →→→→ 3 4
9 →→→→ 9 4 →→→→ 4
9 →→→→ 9
![Page 38: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/38.jpg)
Sorting 38
Execution Example (cont.)
Partition, …, recursive call, base case
7 9 7 1 →→→→ 1 3 8 6
8 →→→→ 8
7 2 9 4 3 7 6 1 →→→→ 1 2 3 4 6 7 8 9
2 4 3 1 →→→→ 1 2 3 4
1 →→→→ 1 4 3 →→→→ 3 4
9 →→→→ 9 4 →→→→ 4
9 →→→→ 9
![Page 39: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/39.jpg)
Sorting 39
Execution Example (cont.)
Join, join
7 9 7 →→→→ 17 7 9
8 →→→→ 8
7 2 9 4 3 7 6 1 →→→→ 1 2 3 4 6 7 7 9
2 4 3 1 →→→→ 1 2 3 4
1 →→→→ 1 4 3 →→→→ 3 4
9 →→→→ 9 4 →→→→ 4
9 →→→→ 9
![Page 40: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/40.jpg)
Sorting 40
Worst-case Running TimeThe worst case for quick-sort occurs when the pivot is the unique minimum or maximum element
One of L and G has size n − 1 and the other has size 0
The running time is proportional to the sum
n + (n − 1) + … + 2 + 1
Thus, the worst-case running time of quick-sort is O(n2)
timedepth
1n − 1
……
n − 11
n0
…
![Page 41: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/41.jpg)
Sorting 41
Expected Running TimeConsider a recursive call of quick-sort on a sequence of size s
� Good call: the sizes of L and G are each less than 3s/4� Bad call: one of L and G has size greater than 3s/4
A call is good with probability 1/2� 1/2 of the possible pivots cause good calls:
7 9 7 1 →→→→ 1
7 2 9 4 3 7 6 1 9
2 4 3 1 7 2 9 4 3 7 61
7 2 9 4 3 7 6 1
Good call Bad call
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Good pivotsBad pivots Bad pivots
![Page 42: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/42.jpg)
Sorting 42
Expected Running Time, Part 2Probabilistic Fact: The expected number of coin tosses required in order to get k heads is 2k
For a node of depth i, we expect
� i/2 ancestors are good calls
� The size of the input sequence for the current call is at most (3/4)i/2n
s(r)
s(a) s(b)
s(c) s(d) s(f)s(e)
time per levelexpected height
O(log n)
O(n)
O(n)
O(n)
total expected time: O(n log n)
Therefore, we have
� For a node of depth 2log4/3n, the expected input size is one
� The expected height of the quick-sort tree is O(log n)
The amount or work done at the nodes of the same depth is O(n)
Thus, the expected running time of quick-sort is O(n log n)
![Page 43: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/43.jpg)
Sorting 43
In-Place Quick-SortQuick-sort can be implemented to run in-place
In the partition step, we use replace operations to rearrange the elements of the input sequence such that
� the elements less than the pivot have rank less than h
� the elements equal to the pivot have rank between h and k
� the elements greater than the pivot have rank greater than k
The recursive calls consider
� elements with rank less than h
� elements with rank greater than k
Algorithm inPlaceQuickSort(S, l, r)
Input sequence S, ranks l and r
Output sequence S with theelements of rank between l and rrearranged in increasing order
if l ≥ r
return
i ← a random integer between l and r
x ← S.elemAtRank(i)
(h, k) ← inPlacePartition(x)
inPlaceQuickSort(S, l, h − 1)
inPlaceQuickSort(S, k + 1, r)
![Page 44: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/44.jpg)
Sorting 44
In-Place PartitioningPerform the partition using two indices to split S into L and EΥG (a similar method can split EΥG into E and G).
Repeat until j and k cross:
� Scan j to the right until finding an element > x.
� Scan k to the left until finding an element < x.
� Swap elements at indices j and k
3 2 5 1 0 7 3 5 9 2 7 9 8 9 7 6 9
j k
(pivot = 6)
3 2 5 1 0 7 3 5 9 2 7 9 8 9 7 6 9
j k
![Page 45: Sorting - Đại Học Quốc Gia Hà Nộiuet.vnu.edu.vn/~chauttm/dsa2012w/slides/Lec06_Sorting.pdf · These slides are adapted from slides provided with Data Structures and Algorithms](https://reader030.vdocument.in/reader030/viewer/2022021801/5b3f603a7f8b9af46b8c2305/html5/thumbnails/45.jpg)
Sorting 45
Summary of Sorting Algorithms
in-place, randomized
fastest (good for large inputs)
O(n log n)
expectedquick-sort
sequential data access
fast (good for huge inputs)O(n log n)merge-sort
in-place
fast (good for large inputs)O(n log n)heap-sort
O(n2)
O(n2)
Time
insertion-sort
bubble-sort
Algorithm Notes
in-place
slow (good for small inputs)
in-place
slow (good for small inputs)