![Page 1: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/1.jpg)
CMSC 132: Object-Oriented Programming II
Sorting
CMSC 132 Summer 2020 1
![Page 2: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/2.jpg)
What Is Sorting?
• To arrange a collection of items in some specified order.• Numerical order • Lexicographical order
• Input: sequence <a1, a2, …, an> of numbers.•Output: permutation <a'1, a'2, …, a’n> such that a'1 £ a'2£ … £ a'n .• Example
• Start à 1 23 2 56 9 8 10 100• End à 1 2 8 9 10 23 56 100
CMSC 132 Summer 2020 2
![Page 3: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/3.jpg)
Why Sort?
• A classic problem in computer science.
• Data requested in sorted order• e.g., list students in increasing GPA order
• Searching
• To find an element in an array of a million elements• Linear search: average 500,000 comparisons• Binary search: worst case 20 comparisons
• Database, Phone book• Eliminating duplicate copies in a collection of records• Finding a missing element, Max, Min
CMSC 132 Summer 2020 3
![Page 4: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/4.jpg)
Sorting Algorithms
• Selection Sort Bubble Sort• Insertion Sort Shell Sort• T(n)=O(n2) Quadratic growth• In clock time
• Double input -> 4X time• Feasible for small inputs, quickly unmanagable
• Halve input -> 1/4 time• Hmm... can recursion save the day?• If have two sorted halves, how to produce sorted full
result?
10,000 3 sec 20,000 17 sec
50,000 77 sec 100,000 5 min
CMSC 132 Summer 2020 4
![Page 5: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/5.jpg)
Divide and Conquer
1. Base case: the problem is small enough, solve directly
2. Divide the problem into two or more similar and smallersubproblems
3. Recursively solve the subproblems
4. Combine solutions to the subproblems
CMSC 132 Summer 2020 5
![Page 6: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/6.jpg)
Merge Sort
• Divide and conquer algorithm• Worst case: O(nlogn)• Stable
• maintain the relative order of records with equal values
• Input: 12, 5, 8, 13, 8, 27 • Stable: 5, 8, 8, 12, 13, 27 • Not Stable:5, 8, 8, 12, 13, 27
CMSC 132 Summer 2020 6
![Page 7: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/7.jpg)
Stable Sort Example
CMSC 132 Summer 2020 7
Sort by name
Now, sort by section
StableNot Stable
![Page 8: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/8.jpg)
Merge Sort: Idea
MergeRecursively sort
Divide intotwo halves
FirstPart SecondPart
FirstPart SecondPart
A:
A is sorted!
CMSC 132 Summer 2020 8
![Page 9: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/9.jpg)
Merge-Sort: Merge
Sorted Sorted
merge
A:
L: R:
Sorted
CMSC 132 Summer 2020 9
![Page 10: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/10.jpg)
Merge Example
L: R:1 2 6 8 3 4 5 7
A:
CMSC 132 Summer 2020 10
i=0 j=0
![Page 11: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/11.jpg)
Merge Example
L: R:
1
1 2 6 8 3 4 5 7
A:
CMSC 132 Summer 2020 11
i=1 j=0
![Page 12: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/12.jpg)
Merge Example
L: R:
21
1 2 6 8 3 4 5 7
A:
CMSC 132 Summer 2020 12
i=2 j=0
![Page 13: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/13.jpg)
Merge Example cont.
1 2 3 4 5 6 7 8
L:
A:
3 5 15 28 6 10 14 22
R:1 2 6 8 3 4 5 7
i=4 j=4
k=8
CMSC 132 Summer 2020 13
![Page 14: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/14.jpg)
Merge sort algorithm
MERGE-SORT A[1 . . n]
1. If n = 1, done.2. Recursively sort A[ 1 . . én/2ù ] and A[
én/2ù+1 . . n ] .3. “Merge” the 2 sorted lists.
Key subroutine: MERGE
CMSC 132 Summer 2020 14
![Page 15: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/15.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 15
![Page 16: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/16.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 16
![Page 17: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/17.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 17
![Page 18: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/18.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 18
![Page 19: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/19.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 19
![Page 20: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/20.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 20
![Page 21: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/21.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 21
![Page 22: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/22.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 22
![Page 23: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/23.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 23
![Page 24: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/24.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 24
![Page 25: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/25.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 25
![Page 26: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/26.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 26
![Page 27: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/27.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 27
![Page 28: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/28.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 28
![Page 29: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/29.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 29
![Page 30: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/30.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 30
![Page 31: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/31.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 31
![Page 32: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/32.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 32
![Page 33: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/33.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 33
![Page 34: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/34.jpg)
Merge sort (Example)
CMSC 132 Summer 2020 34
![Page 35: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/35.jpg)
Analysis of merge sort
MERGE-SORT A[1 . . n]
1. If n = 1, done.2. Recursively sort A[ 1 . . én/2ù ]
and A[ én/2ù+1 . . n ] .3. “Merge” the 2 sorted lists
T(n)
Q(1)
2T(n/2)
Q(n)
CMSC 132 Summer 2020 35
![Page 36: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/36.jpg)
Analyzing merge sort
T(n) =Q(1) if n = 1;
2T(n/2) + Q(n) if n > 1.
T(n) = Q(n lg n) (n > 1)
CMSC 132 Summer 2020 36
![Page 37: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/37.jpg)
Recursion tree
Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.
cn
cn/4 cn/4 cn/4 cn/4
cn/2 cn/2
Q(1)
…
h = log n
cn
cn
cn
#leaves = n Q(n)
Total = Q(n log n)
…
CMSC 132 Summer 2020 37
![Page 38: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/38.jpg)
Memory Requirement
Needs additional n locations because it is difficult to merge two sorted sets in place
L: R:1 2 6 8 3 4 5 7
A:
CMSC 132 Summer 2020 38
![Page 39: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/39.jpg)
Merge Sort Conclusion
• Merge Sort: O(n log n)
• asymptotically beats insertion sort in the worst case
• In practice, merge sort beats insertion sort for n > 30 or so
• Space requirement:
• O(n), not in-place
CMSC 132 Summer 2020 39
![Page 40: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/40.jpg)
HEAPSORT
CMSC 132 Summer 2020 40
![Page 41: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/41.jpg)
Heapsort
• Merge sort time is O(n log n) but still requires, temporarily, n extra storage locations
• Heapsort does not require any additional storage• As its name implies, heapsort uses a heap to store the
array
CMSC 132 Summer 2020 41
![Page 42: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/42.jpg)
Heapsort Algorithm
CMSC 132 Summer 2020 42
1. Insert each value from the array to be sorted into a priority queue (min-heap).
2. Swap the first element of the list with the final element. Decrease the considered range of the list by one.
3. Call the sink() function on the list to sink the new first element to its appropriate index in the heap.
4. Go to step (2) unless the considered range of the list is one element.
![Page 43: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/43.jpg)
Trace of Heapsort
89
76 74
37 32 39 66
20 26 18 28 29 6
CMSC 132 Summer 2020 43
![Page 44: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/44.jpg)
Trace of Heapsort (cont.)
89
76 74
37 32 39 66
20 26 18 28 29 6
CMSC 132 Summer 2020 44
![Page 45: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/45.jpg)
Trace of Heapsort (cont.)
89
76 74
37 32 39 66
20 26 18 28 29 6
CMSC 132 Summer 2020 45
![Page 46: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/46.jpg)
Trace of Heapsort (cont.)
6
76 74
37 32 39 66
20 26 18 28 29 89
CMSC 132 Summer 2020 46
![Page 47: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/47.jpg)
Trace of Heapsort (cont.)
76
6 74
37 32 39 66
20 26 18 28 29 89
CMSC 132 Summer 2020 47
![Page 48: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/48.jpg)
Trace of Heapsort (cont.)
76
37 74
6 32 39 66
20 26 18 28 29 89
CMSC 132 Summer 2020 48
![Page 49: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/49.jpg)
Trace of Heapsort (cont.)
76
37 74
26 32 39 66
20 6 18 28 29 89
CMSC 132 Summer 2020 49
![Page 50: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/50.jpg)
Trace of Heapsort (cont.)
76
37 74
26 32 39 66
20 6 18 28 29 89
CMSC 132 Summer 2020 50
![Page 51: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/51.jpg)
Trace of Heapsort (cont.)
76
37 74
26 32 39 66
20 6 18 28 29 89
CMSC 132 Summer 2020 51
![Page 52: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/52.jpg)
Trace of Heapsort (cont.)
76
37 74
26 32 39 66
20 6 18 28 29 89
CMSC 132 Summer 2020 52
![Page 53: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/53.jpg)
Trace of Heapsort (cont.)
29
37 74
26 32 39 66
20 6 18 28 76 89
CMSC 132 Summer 2020 53
![Page 54: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/54.jpg)
Trace of Heapsort (cont.)
74
37 29
26 32 39 66
20 6 18 28 76 89
CMSC 132 Summer 2020 54
![Page 55: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/55.jpg)
Trace of Heapsort (cont.)
74
37 66
26 32 39 29
20 6 18 28 76 89
CMSC 132 Summer 2020 55
![Page 56: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/56.jpg)
Trace of Heapsort (cont.)
74
37 66
26 32 39 29
20 6 18 28 76 89
CMSC 132 Summer 2020 56
![Page 57: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/57.jpg)
Trace of Heapsort (cont.)
74
37 66
26 32 39 29
20 6 18 28 76 89
CMSC 132 Summer 2020 57
![Page 58: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/58.jpg)
Trace of Heapsort (cont.)
74
37 66
26 32 39 29
20 6 18 28 76 89
CMSC 132 Summer 2020 58
![Page 59: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/59.jpg)
Trace of Heapsort (cont.)
28
37 66
26 32 39 29
20 6 18 74 76 89
CMSC 132 Summer 2020 59
![Page 60: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/60.jpg)
Trace of Heapsort (cont.)
6
18 20
26 28 29 32
37 39 66 74 76 89
CMSC 132 Summer 2020 60
Continue until everything sorted
![Page 61: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/61.jpg)
Revising the Heapsort Algorithm
CMSC 132 Summer 2020 61
• Each element removed will be placed at the end of the array.• The heap part of the array decreases by one element
![Page 62: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/62.jpg)
Analysis of Heapsort
• Because a heap is a complete binary tree, it has log n levels
• Building a heap of size n requires finding the correct location for an item in a heap with log n levels
• Each insert (or remove) is O(log n)• With n items, building a heap is O(n log n)• No extra storage is needed
CMSC 132 Summer 2020 62
![Page 63: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/63.jpg)
Quicksort
• Developed in 1962• Quicksort selects a specific value called a pivot and
rearranges the array into two parts (called partioning)• all the elements in the left subarray are less than or
equal to the pivot• all the elements in the right subarray are larger than
the pivot• The pivot is placed between the two subarrays
• The process is repeated until the array is sorted
CMSC 132 Summer 2020 63
![Page 64: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/64.jpg)
Merge sort vs Quick Sort
CMSC 132 Summer 2020 64
13 89 46 22 57 76 98 34 66 83
13 89 46 22 57 76 98 34 66 83
split
13 22 46 57 89 76 98 34 66 83
sort recursively
13 22 34 46 57 66 76 83 89 98
merge
Merge sort
![Page 65: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/65.jpg)
Merge sort vs Quick Sort
CMSC 132 Summer 2020 65
13 89 46 22 57 76 98 34 66 83
13 46 22 57 34 89 76 98 66 83
Split (smart, extra work here)
13 22 34 46 57 66 76 83 89 98
sort recursively
Merge is not necessary
<= 57 > 57
![Page 66: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/66.jpg)
Trace of Quicksort
44 75 23 43 55 12 64 77 33
CMSC 132 Summer 2020 66
![Page 67: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/67.jpg)
Trace of Quicksort (cont.)
44 75 23 43 55 12 64 77 33
pivot
CMSC 132 Summer 2020 67
i j
move i if a[i] > pivotmove j if a[j] < pivot
![Page 68: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/68.jpg)
Trace of Quicksort (cont.)
44 33 23 43 55 12 64 77 75
pivot
CMSC 132 Summer 2020 68
i j
Swap(a[i],a[j])
![Page 69: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/69.jpg)
Trace of Quicksort (cont.)
44 33 23 43 55 12 64 77 75
pivot
CMSC 132 Summer 2020 69
i j
Move i if a[i] > pivotMove j if a[j] < pivot
![Page 70: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/70.jpg)
Trace of Quicksort (cont.)
44 33 23 43 12 55 64 77 75
pivot
CMSC 132 Summer 2020 70
i j
Swap(a[i],a[j])
![Page 71: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/71.jpg)
Trace of Quicksort (cont.)
44 33 23 43 12 55 64 77 75
pivot
CMSC 132 Summer 2020 71
ij
Move i if a[i] > pivotMove j if a[j] < pivot
![Page 72: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/72.jpg)
Trace of Quicksort (cont.)
44 33 23 43 12 55 64 77 75
pivot
CMSC 132 Summer 2020 72
ij
Break if i >= j
![Page 73: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/73.jpg)
Trace of Quicksort (cont.)
12 33 23 43 44 55 64 77 75
CMSC 132 Summer 2020 73
ij
Swap(pivot,a[j]
One iteration is done
![Page 74: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/74.jpg)
Trace of Quicksort (cont.)
12 33 23 43 44 55 64 77 75
CMSC 132 Summer 2020 74
Recursively sort first and second subarray
![Page 75: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/75.jpg)
Trace of Quicksort (cont.)
12 33 23 43
CMSC 132 Summer 2020 75
pivot
i j
Move i if a[i] > pivotMove j if a[j] < pivot
![Page 76: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/76.jpg)
Trace of Quicksort (cont.)
12 33 23 43
CMSC 132 Summer 2020 76
pivot
ij
Break if i >= j
![Page 77: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/77.jpg)
Trace of Quicksort (cont.)
12 33 23 43
CMSC 132 Summer 2020 77
pivot
ij
Swap(pivot,a[j]
Second iteration for left half is done
![Page 78: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/78.jpg)
Trace of Quicksort (cont.)
12 33 23 43
CMSC 132 Summer 2020 78
Recursively sort second subarray
![Page 79: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/79.jpg)
Trace of Quicksort (cont.)
33 23 43
CMSC 132 Summer 2020 79
pivot
i j
Move i if a[i] > pivotMove j if a[j] < pivot
![Page 80: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/80.jpg)
Trace of Quicksort (cont.)
33 23 43
CMSC 132 Summer 2020 80
pivot
ij
Break if i >= j
![Page 81: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/81.jpg)
Trace of Quicksort (cont.)
23 33 43
CMSC 132 Summer 2020 81
pivot
ij
Swap(pivot,a[j]
Another iteration is done
![Page 82: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/82.jpg)
Trace of Quicksort (cont.)
23 33 43
CMSC 132 Summer 2020 82
Subarray to sort
![Page 83: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/83.jpg)
Trace of Quicksort (cont.)
12 23 33 43 44 55 64 77 75
CMSC 132 Summer 2020 83
Recursively sort the second subarray
Sorted
![Page 84: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/84.jpg)
Quick Sort Algorithm
CMSC 132 Summer 2020 84
/* quicksort the subarray from a[lo] to a[hi] */
void sort(Comparable[] a, int lo, int hi) {if (hi <= lo) return;int j = partition(a, lo, hi);sort(a, lo, j-1);sort(a, j+1, hi);
}
![Page 85: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/85.jpg)
Partition
CMSC 132 Summer 2020 85
// partition the subarray a[lo..hi] so that a[lo..j-1] <= a[j] <= a[j+1..hi] // and return the index j. int partition(Comparable[] a, int lo, int hi) {
int i = lo;int j = hi + 1;Comparable v = a[lo];while (true) {
// find item on lo to swapwhile (less(a[++i], v))
if (i == hi) break;/* find item on hi to swap */while (less(v, a[--j]))if (j == lo) break;
// check if pointers crossif (i >= j) break;exch(a, i, j);
} // put partitioning item v at a[j]exch(a, lo, j);
// now, a[lo .. j-1] <= a[j] <= a[j+1 .. hi] return j;
}
![Page 86: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/86.jpg)
Analysis of Quicksort
• If the pivot value is a random value selected from the current subarray,• then statistically half of the items in the subarray will
be less than the pivot and half will be greater• If both subarrays have the same number of elements
(best case), there will be log n levels of recursion• At each recursion level, the partitioning process involves
moving every element to its correct position—n moves• Quicksort is O(n log n), just like merge sort
CMSC 132 Summer 2020 86
![Page 87: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/87.jpg)
Analysis of Quicksort (cont.)
• A quicksort will give very poor behavior if, each time the array is partitioned, a subarray is empty.
• In that case, the sort will be O(n2)
• Under these circumstances, the overhead of recursive calls and the extra run-time stack storage required by these calls makes this version of quicksort a poor performer relative to the quadratic sorts.
CMSC 132 Summer 2020 87
![Page 88: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/88.jpg)
If Pivot is the largest or smallest value
CMSC 132 Summer 2020 88
![Page 89: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/89.jpg)
Revised Partition Algorithm
• A better solution is to pick the pivot value in a way that is less likely to lead to a bad split• Use three references: first, middle, last• Select the median of these items as the pivot
CMSC 132 Summer 2020 89
![Page 90: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/90.jpg)
Trace of Revised Partitioning
10 75 23 43 90 12 64 77 50
CMSC 132 Summer 2020 90
![Page 91: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/91.jpg)
Trace of Revised Partitioning (cont.)
10 75 23 43 90 12 64 77 50
middlefirst last
CMSC 132 Summer 2020 91
![Page 92: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/92.jpg)
Trace of Revised Partitioning (cont.)
50 75 23 43 10 12 64 77 90
middlefirst last
CMSC 132 Summer 2020 92
Make the middle number pivot
![Page 93: CMSC 132: Object-Oriented Programming II...Why Sort? • A classic problem in computer science. •Data requested in sorted order • e.g., list students in increasing GPA order •](https://reader033.vdocument.in/reader033/viewer/2022043011/5fa3a8890861e606a46c7a8c/html5/thumbnails/93.jpg)
Sorting Algorithm Comparison
Name Best Average
Worst Memory Stable
Bubble Sort n n2 n2 1 yesSelection Sort
n2 n2 n2 1 no
Insertion Sort
n n2 n2 1 yes
Merge Sort nlogn nlogn nlogn n yesQuick Sort nlogn nlogn n2 log n noHeap Sort nlogn nlogn nlogn 1 no
CMSC 132 Summer 2020 93