Download presentation
Presentation is loading. Please wait.
1
Lecture 16 Bubble Sort Merge Sort
2
Bubble Sort
3
Sorting Sorting takes an unordered collection and makes it an ordered one. 77 42 35 12 101 5 5 12 35 42 77 101
4
"Bubbling Up" the Largest Element
Traverse a collection of elements Move from the front to the end “Bubble” the largest value to the end using pair-wise comparisons and swapping 77 42 35 12 101 5
5
"Bubbling Up" the Largest Element
Traverse a collection of elements Move from the front to the end “Bubble” the largest value to the end using pair-wise comparisons and swapping Swap 42 77 77 42 35 12 101 5
6
"Bubbling Up" the Largest Element
Traverse a collection of elements Move from the front to the end “Bubble” the largest value to the end using pair-wise comparisons and swapping Swap 35 77 42 77 35 12 101 5
7
"Bubbling Up" the Largest Element
Traverse a collection of elements Move from the front to the end “Bubble” the largest value to the end using pair-wise comparisons and swapping Swap 12 77 42 35 77 12 101 5
8
"Bubbling Up" the Largest Element
Traverse a collection of elements Move from the front to the end “Bubble” the largest value to the end using pair-wise comparisons and swapping 42 35 12 77 101 5 No need to swap
9
"Bubbling Up" the Largest Element
Traverse a collection of elements Move from the front to the end “Bubble” the largest value to the end using pair-wise comparisons and swapping Swap 5 101 42 35 12 77 101 5
10
"Bubbling Up" the Largest Element
Traverse a collection of elements Move from the front to the end “Bubble” the largest value to the end using pair-wise comparisons and swapping 101 42 35 12 77 5 Largest value correctly placed
11
The “Bubble Up” Algorithm
index <- 1 last_compare_at <- n – 1 loop exitif(index > last_compare_at) if(A[index] > A[index + 1]) then Swap(A[index], A[index + 1]) endif index <- index + 1 endloop
12
No, Swap isn’t built in. LB Procedure Swap(a, b isoftype in/out Num)
t isoftype Num t <- a a <- b b <- t endprocedure // Swap
13
Items of Interest Notice that only the largest value is correctly placed All other values are still out of order So we need to repeat this process 101 42 35 12 77 5 Largest value correctly placed
14
Repeat “Bubble Up” How Many Times?
If we have N elements… And if each time we bubble an element, we place it in its correct location… Then we repeat the “bubble up” process N – 1 times. This guarantees we’ll correctly place all N elements.
15
“Bubbling” All the Elements
77 12 35 42 5 101 N - 1 5 42 12 35 77 101 42 5 35 12 77 101 42 35 5 12 77 101 42 35 12 5 77 101
16
Reducing the Number of Comparisons
12 35 42 77 101 5 77 12 35 42 5 101 5 42 12 35 77 101 42 5 35 12 77 101 42 35 5 12 77 101
17
Reducing the Number of Comparisons
On the Nth “bubble up”, we only need to do MAX-N comparisons. For example: This is the 4th “bubble up” MAX is 6 Thus we have 2 comparisons to do 42 5 35 12 77 101
18
Putting It All Together
19
N is … // Size of Array Arr_Type definesa Array[1..N] of Num Procedure Swap(n1, n2 isoftype in/out Num) temp isoftype Num temp <- n1 n1 <- n2 n2 <- temp endprocedure // Swap
20
Outer loop Inner loop procedure Bubblesort(A isoftype in/out Arr_Type)
to_do, index isoftype Num to_do <- N – 1 loop exitif(to_do = 0) index <- 1 exitif(index > to_do) if(A[index] > A[index + 1]) then Swap(A[index], A[index + 1]) endif index <- index + 1 endloop to_do <- to_do - 1 endprocedure // Bubblesort Inner loop Outer loop
21
Already Sorted Collections?
What if the collection was already sorted? What if only a few elements were out of place and after a couple of “bubble ups,” the collection was sorted? We want to be able to detect this and “stop early”! 42 35 12 5 77 101
22
Using a Boolean “Flag” We can use a boolean variable to determine if any swapping occurred during the “bubble up.” If no swapping occurred, then we know that the collection is already sorted! This boolean “flag” needs to be reset after each “bubble up.”
23
did_swap isoftype Boolean
did_swap <- true loop exitif ((to_do = 0) OR NOT(did_swap)) index <- 1 did_swap <- false exitif(index > to_do) if(A[index] > A[index + 1]) then Swap(A[index], A[index + 1]) endif index <- index + 1 endloop to_do <- to_do - 1
24
An Animated Example N 8 did_swap true to_do 7 index 98 23 45 14 6 67
33 42
25
An Animated Example N 8 did_swap false to_do 7 index 1 98 23 45 14 6
67 33 42
26
An Animated Example N 8 did_swap false to_do 7 index 1 Swap 98 23 45
14 6 67 33 42
27
An Animated Example N 8 did_swap true to_do 7 index 1 Swap 23 98 45 14
6 67 33 42
28
An Animated Example N 8 did_swap true to_do 7 index 2 23 98 45 14 6 67
33 42
29
An Animated Example N 8 did_swap true to_do 7 index 2 Swap 23 98 45 14
6 67 33 42
30
An Animated Example N 8 did_swap true to_do 7 index 2 Swap 23 45 98 14
6 67 33 42
31
An Animated Example N 8 did_swap true to_do 7 index 3 23 45 98 14 6 67
33 42
32
An Animated Example N 8 did_swap true to_do 7 index 3 Swap 23 45 98 14
6 67 33 42
33
An Animated Example N 8 did_swap true to_do 7 index 3 Swap 23 45 14 98
6 67 33 42
34
An Animated Example N 8 did_swap true to_do 7 index 4 23 45 14 98 6 67
33 42
35
An Animated Example N 8 did_swap true to_do 7 index 4 Swap 23 45 14 98
6 67 33 42
36
An Animated Example N 8 did_swap true to_do 7 index 4 Swap 23 45 14 6
98 67 33 42
37
An Animated Example N 8 did_swap true to_do 7 index 5 23 45 14 6 98 67
33 42
38
An Animated Example N 8 did_swap true to_do 7 index 5 Swap 23 45 14 6
98 67 33 42
39
An Animated Example N 8 did_swap true to_do 7 index 5 Swap 23 45 14 6
67 98 33 42
40
An Animated Example N 8 did_swap true to_do 7 index 6 23 45 14 6 67 98
33 42
41
An Animated Example N 8 did_swap true to_do 7 index 6 Swap 23 45 14 6
67 98 33 42
42
An Animated Example N 8 did_swap true to_do 7 index 6 Swap 23 45 14 6
67 33 98 42
43
An Animated Example N 8 did_swap true to_do 7 index 7 23 45 14 6 67 33
98 42
44
An Animated Example N 8 did_swap true to_do 7 index 7 Swap 23 45 14 6
67 33 98 42
45
An Animated Example N 8 did_swap true to_do 7 index 7 Swap 23 45 14 6
67 33 42 98
46
After First Pass of Outer Loop
N 8 did_swap true to_do 7 Finished first “Bubble Up” index 8 23 45 14 6 67 33 42 98
47
The Second “Bubble Up” N 8 did_swap false to_do 6 index 1 23 45 14 6
67 33 42 98
48
The Second “Bubble Up” N 8 did_swap false to_do 6 index 1 No Swap 23
45 14 6 67 33 42 98
49
The Second “Bubble Up” N 8 did_swap false to_do 6 index 2 23 45 14 6
67 33 42 98
50
The Second “Bubble Up” N 8 did_swap false to_do 6 index 2 Swap 23 45
14 6 67 33 42 98
51
The Second “Bubble Up” N 8 did_swap true to_do 6 index 2 Swap 23 14 45
67 33 42 98
52
The Second “Bubble Up” N 8 did_swap true to_do 6 index 3 23 14 45 6 67
33 42 98
53
The Second “Bubble Up” N 8 did_swap true to_do 6 index 3 Swap 23 14 45
67 33 42 98
54
The Second “Bubble Up” N 8 did_swap true to_do 6 index 3 Swap 23 14 6
45 67 33 42 98
55
The Second “Bubble Up” N 8 did_swap true to_do 6 index 4 23 14 6 45 67
33 42 98
56
The Second “Bubble Up” N 8 did_swap true to_do 6 index 4 No Swap 23 14
45 67 33 42 98
57
The Second “Bubble Up” N 8 did_swap true to_do 6 index 5 23 14 6 45 67
33 42 98
58
The Second “Bubble Up” N 8 did_swap true to_do 6 index 5 Swap 23 14 6
45 67 33 42 98
59
The Second “Bubble Up” N 8 did_swap true to_do 6 index 5 Swap 23 14 6
45 33 67 42 98
60
The Second “Bubble Up” N 8 did_swap true to_do 6 index 6 23 14 6 45 33
67 42 98
61
The Second “Bubble Up” N 8 did_swap true to_do 6 index 6 Swap 23 14 6
45 33 67 42 98
62
The Second “Bubble Up” N 8 did_swap true to_do 6 index 6 Swap 23 14 6
45 33 42 67 98
63
After Second Pass of Outer Loop
8 did_swap true to_do 6 Finished second “Bubble Up” index 7 23 14 6 45 33 42 67 98
64
The Third “Bubble Up” N 8 did_swap false to_do 5 index 1 23 14 6 45 33
42 67 98
65
The Third “Bubble Up” N 8 did_swap false to_do 5 index 1 Swap 23 14 6
45 33 42 67 98
66
The Third “Bubble Up” N 8 did_swap true to_do 5 index 1 Swap 14 23 6
45 33 42 67 98
67
The Third “Bubble Up” N 8 did_swap true to_do 5 index 2 14 23 6 45 33
42 67 98
68
The Third “Bubble Up” N 8 did_swap true to_do 5 index 2 Swap 14 23 6
45 33 42 67 98
69
The Third “Bubble Up” N 8 did_swap true to_do 5 index 2 Swap 14 6 23
45 33 42 67 98
70
The Third “Bubble Up” N 8 did_swap true to_do 5 index 3 14 6 23 45 33
42 67 98
71
The Third “Bubble Up” N 8 did_swap true to_do 5 index 3 No Swap 14 6
23 45 33 42 67 98
72
The Third “Bubble Up” N 8 did_swap true to_do 5 index 4 14 6 23 45 33
42 67 98
73
The Third “Bubble Up” N 8 did_swap true to_do 5 index 4 Swap 14 6 23
45 33 42 67 98
74
The Third “Bubble Up” N 8 did_swap true to_do 5 index 4 Swap 14 6 23
33 45 42 67 98
75
The Third “Bubble Up” N 8 did_swap true to_do 5 index 5 14 6 23 33 45
42 67 98
76
The Third “Bubble Up” N 8 did_swap true to_do 5 index 5 Swap 14 6 23
33 45 42 67 98
77
The Third “Bubble Up” N 8 did_swap true to_do 5 index 5 Swap 14 6 23
33 42 45 67 98
78
After Third Pass of Outer Loop
N 8 did_swap true to_do 5 Finished third “Bubble Up” index 6 14 6 23 33 42 45 67 98
79
The Fourth “Bubble Up” N 8 did_swap false to_do 4 index 1 14 6 23 33
42 45 67 98
80
The Fourth “Bubble Up” N 8 did_swap false to_do 4 index 1 Swap 14 6 23
33 42 45 67 98
81
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 1 Swap 6 14 23
33 42 45 67 98
82
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 2 6 14 23 33 42
45 67 98
83
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 2 No Swap 6 14
23 33 42 45 67 98
84
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 3 6 14 23 33 42
45 67 98
85
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 3 No Swap 6 14
23 33 42 45 67 98
86
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 4 6 14 23 33 42
45 67 98
87
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 4 No Swap 6 14
23 33 42 45 67 98
88
After Fourth Pass of Outer Loop
N 8 did_swap true to_do 4 Finished fourth “Bubble Up” index 5 6 14 23 33 42 45 67 98
89
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 1 6 14 23 33 42
45 67 98
90
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 1 No Swap 6 14
23 33 42 45 67 98
91
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 2 6 14 23 33 42
45 67 98
92
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 2 No Swap 6 14
23 33 42 45 67 98
93
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 3 6 14 23 33 42
45 67 98
94
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 3 No Swap 6 14
23 33 42 45 67 98
95
After Fifth Pass of Outer Loop
N 8 did_swap false to_do 3 Finished fifth “Bubble Up” index 4 6 14 23 33 42 45 67 98
96
Finished “Early” N 8 did_swap false to_do 3
We didn’t do any swapping, so all of the other elements must be correctly placed. We can “skip” the last two passes of the outer loop. index 4 6 14 23 33 42 45 67 98
97
Summary “Bubble Up” algorithm will move largest value to its correct location (to the right) Repeat “Bubble Up” until all elements are correctly placed: Maximum of N-1 times Can finish early if no swapping occurs We reduce the number of elements we compare each time one is correctly placed
98
Truth in CS Act NOBODY EVER USES BUBBLE SORT NOBODY NOT EVER
LB Truth in CS Act NOBODY EVER USES BUBBLE SORT NOBODY NOT EVER BECAUSE IT IS EXTREMELY INEFFICIENT
99
Questions?
100
Mergesort
101
Sorting Sorting takes an unordered collection and makes it an ordered one. 77 42 35 12 101 5 5 12 35 42 77 101
102
Divide and Conquer Divide and Conquer cuts the problem in half each time, but uses the result of both halves: cut the problem in half until the problem is trivial solve for both halves combine the solutions
103
Mergesort A divide-and-conquer algorithm:
Divide the unsorted array into 2 halves until the sub-arrays only contain one element Merge the sub-problem solutions together: Compare the sub-array’s first elements Remove the smallest element and put it into the result array Continue the process until all elements have been put into the result array 37 23 6 89 15 12 2 19
104
How to Remember Merge Sort?
That’s easy. Just remember Mariah Carey. As a singing star, Ms. Carey has perfected the “wax-on” wave motion--a clockwise sweep of her hand used to emphasize lyrics. The Maria “Wax-on” Angle: ¦(q,t) The Siren of Subquadratic Sorts
105
How To Remember Merge Sort?
¦(q,t) Just as Mariah recursively moves her hands into smaller circles, so too does merge sort recursively split an array into smaller segments. We need two such recursions, one for each half of the split array.
106
Algorithm Mergesort(Passed an array) if array size > 1
Divide array in half Call Mergesort on first half. Call Mergesort on second half. Merge two halves. Merge(Passed two arrays) Compare leading element in each array Select lower and place in new array. (If one input array is empty then place remainder of other array in output array)
107
More TRUTH in CS LB We don’t really pass in two arrays!
We pass in one array with indicator variables which tell us where one set of data starts and finishes and where the other set of data starts and finishes. Honest. s1 f1 s2 f2
108
Algorithm LB Mergesort(Passed an array) if array size > 1
Divide array in half Call Mergesort on first half. Call Mergesort on second half. Merge two halves. Merge(Passed two arrays) Compare leading element in each array Select lower and place in new array. (If one input array is empty then place remainder of other array in output array)
109
98 23 45 14 6 67 33 42
110
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42
111
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14
112
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23
113
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 Merge
114
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 Merge
115
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 Merge
116
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 45 14 23 98
117
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 45 14 23 98 Merge
118
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 45 14 23 98 14 Merge
119
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 45 14 23 98 14 45 Merge
120
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 45 14 23 98 14 45 Merge
121
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 45 14 23 98 14 45 14 Merge
122
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 45 14 23 98 14 45 14 23 Merge
123
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 45 14 23 98 14 45 14 23 45 Merge
124
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 98 23 45 14 23 98 14 45 14 23 45 98 Merge
125
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 23 98 14 45 14 23 45 98
126
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 23 98 14 45 14 23 45 98
127
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 23 98 14 45 14 23 45 98 Merge
128
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 23 98 14 45 6 14 23 45 98 Merge
129
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 23 98 14 45 6 67 14 23 45 98 Merge
130
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 14 23 45 98
131
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 14 23 45 98 Merge
132
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 14 23 45 98 Merge
133
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 Merge
134
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 Merge
135
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 Merge
136
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 Merge
137
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 Merge
138
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 Merge
139
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 Merge
140
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 6 Merge
141
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 6 14 Merge
142
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 6 14 23 Merge
143
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 6 14 23 33 Merge
144
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 6 14 23 33 42 Merge
145
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 6 14 23 33 42 45 Merge
146
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 6 14 23 33 42 45 67 Merge
147
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 6 14 23 33 42 45 67 98 Merge
148
98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 98 23 45 14 6 67 33 42 23 98 14 45 6 67 33 42 14 23 45 98 6 33 42 67 6 14 23 33 42 45 67 98
149
98 23 45 14 6 67 33 42 6 14 23 33 42 45 67 98
150
Summary Divide the unsorted collection into two
Until the sub-arrays only contain one element Then merge the sub-problem solutions together
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.