![Page 1: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/1.jpg)
1
COMP 250
Lecture 7
Sorting a List:bubble sort
selection sortinsertion sort
Sept. 22, 2017
![Page 2: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/2.jpg)
3 17 -5 -2 23
4
-5-234
1723
Sorting
2
BEFORE AFTER
![Page 3: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/3.jpg)
Example: sorting exams by last name
3
![Page 4: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/4.jpg)
Sorting Algorithms
• Bubble sort
• Selection sort today 𝑂(𝑁2 )
• Insertion sort
• Mergesort
• Heapsort later 𝑂(𝑁 log 𝑁 )
• Quicksort
4
![Page 5: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/5.jpg)
Sorting Algorithms
Today we are concerned with algorithms, not data structures.
The following algorithms are independent of whether we use an array list or a linked list.
5
![Page 6: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/6.jpg)
Bubble Sort
Repeatedly loop (iterate) through the list.
For each iteration,
if two neighboring elements are in the wrong order,
then swap them.
6
![Page 7: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/7.jpg)
Reminder from 202: swap(x, y)
The following
does not work:
x = y
y = x
Rather, you need to use
a temporary variable:
tmp = y
y = x
x = tmp
7
![Page 8: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/8.jpg)
3 17 -5 -2 23
4
Example: first pass
if list[ 0 ] > list[ 1 ]swap( list[ 0 ], list[1 ] )
0
1
2
3
4
5
![Page 9: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/9.jpg)
3 17 -5 -2 23
4
Example: first pass
9
3 17 -5 -2 23
4
Indicates elements get swapped
if list[ 1 ] > list[ 2 ] swap( list[ 1 ], list[ 2 ] )
0
1
2
3
4
5
![Page 10: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/10.jpg)
3 17 -5 -2 23
4
Example: first pass
10
3 17 -5 -2 23
4
3 -5 17 -223
4
3 -5 -2 17 23
4
3 -5 -2 1723
4
3 -5 -2 174
23
Indicates elements get swapped
0
1
2
3
4
5
![Page 11: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/11.jpg)
What can we say at end of the first pass?
Q: Where is the largest element ?
A:
Q: Where is the smallest element?
A:
11
![Page 12: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/12.jpg)
What can we say at end of the first pass?
Q: Where is the largest element ?
A: It must be at the end of the list (position N-1).
Q: Where is the smallest element ?
A: Anywhere (except position N-1).
12
![Page 13: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/13.jpg)
Bubble Sort Algorithm
repeat {
continue = false
for i = 0 to N – 2 // N-1 is the last index
if list[ i ] > list[ i + 1 ]{
swap( list[ i ], list[ i + 1 ] )
continue = true
}
} until continue == false
13
![Page 14: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/14.jpg)
Bubble Sort Algorithm repeat {
ct = 0
continue = false
for i = 0 to N – 2 – ct { // N-1 is the last index
if list[ i ] > list[ i + 1 ]{
swap( list[ i ], list[ i + 1 ] )
continue = true
}
ct = ct + 1 // now list[ N - ct, … N-1] is sorted
}
} until continue == false14
![Page 15: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/15.jpg)
Selection Sort
Partition the list into two parts: (1) a sorted part and (2) a “rest” part, as follows:
The sorted part is initially empty.
Repeat N times {
find the smallest element in the rest part and
swap it with the first element in the rest part
15
![Page 16: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/16.jpg)
3 17 -5 -2 23
4
Example
16
rest
sorted part is empty
![Page 17: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/17.jpg)
3 17 -5 -2 23
4
Example
17
-5 17 3
-2 23
4
sorted
rest
![Page 18: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/18.jpg)
3 17 -5 -2 23
4
Example
18
-5 17 3
-2 23
4
-5 -2 3
17 23
4
sorted
rest
![Page 19: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/19.jpg)
3 17 -5 -2 23
4
Example
19
-5 17 3
-2 23
4
-5 -2 3
17 23
4
-5-23
17 23
4 rest
sorted
![Page 20: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/20.jpg)
3 17 -5 -2 23
4
Example
20
-5 17 3
-2 23
4
-5 -2 3
17 23
4
-5-23
17 23
4
-5 -23 4
23 17
-5 -23 4
1723
rest
sorted
![Page 21: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/21.jpg)
Selection Sort
for i = 0 to N-2 {
index = i
minValue = list[ i ]
for k = i+1 to N-1 {
if ( list[k] < minValue ){
index = k
minValue = list[k]
}
if ( index != i )
swap( list[i], list[ index ] )
}
// repeat N times
// Take the first element in the rest.
// It has the min value so far.
// For each other element in rest,
// if it is smaller than the min value,
// then remember its index.
// It is the new min value.
// Swap if necessary
21
![Page 22: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/22.jpg)
Selection Sort
for i = 0 to N-2
for k = i+1 to N-1
…….
Q: how many passes through inner loop?
22
![Page 23: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/23.jpg)
Selection Sort
for i = 0 to N-2
for k = i+1 to N-1
…….
Q: how many passes through inner loop?
A: N-1 + N-2 + N-3 + …. + 2 + 1
23
![Page 24: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/24.jpg)
Selection Sort
for i = 0 to N-2
for k = i+1 to N-1
…….
Q: how many passes through inner loop?
A: N-1 + N-2 + N-3 + …. + 2 + 1
= N (N-1) / 2
24
![Page 25: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/25.jpg)
Comparison
25
Bubblesort
repeat {for i = 0 to N – 2 – ct
until continue == false
Selection sort
for i = 0 to N-2 for k = i+1 to N-1
Bestcase
Worstcase
We can terminate outer loop if there are no swaps during a pass.
Outer loop Outer loop
![Page 26: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/26.jpg)
Insertion Sort
for k = 1 to N- 1 {
Insert list element at index k into its correct
position with respect to the elements
at indices 0 to k – 1
}
26
![Page 27: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/27.jpg)
317-5-2234
27
Initial list
![Page 28: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/28.jpg)
Suppose we have sorted elements 0 to k-1
e.g. k = 3
317-5-2234
-53
17-2234
28
Initial list
![Page 29: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/29.jpg)
Suppose we have sorted elements 0 to k-1
e.g. k = 3
Insert element k into its correct position with respect to 0 to k-1
317-5-2234
-53
17-2234
-5-23
17234
29
Initial list
![Page 30: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/30.jpg)
30
Mechanism is similar to inserting (adding) an element to an array list:
Shift all elements ahead by one position to make a hole, and then fill the hole.
![Page 31: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/31.jpg)
Insertion Sort
31
for k = 1 to N - 1 { // index of element to moveelementK = list[k]i = k while (i > 0) and ( elementK < list[ i - 1]){
list[i] = list[i - 1] // copy to nexti = i -1
}list[i] = elementK // paste elementK
}
![Page 32: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/32.jpg)
1 + 2 + 3 + … + 𝑁 − 1 =𝑁 ( 𝑁 − 1)
2
Best case:
the list is already sorted, so it takes 𝑂(𝑁 ) time. i.e. the while loop terminates immediately.
Worse case:
the list is sorted in backwards order.
which takes time 𝑂( 𝑁2 ). Lots of shifts!32
![Page 33: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/33.jpg)
Comparison of 3 methods
33
Bubblesort Selection sort Insertion sort
for k = 1 to N - 1 {while ….
Bestcase
Worstcase
Performance depends highly on initial data. Also, it depends on implementation (array vs. linked list), e.g. what is cost of swap and ‘shift’.
We can terminate outer loop if there are no swaps during a pass.
repeat {for i = 0 to N – 2 – ct
until continue == false
for i = 0 to N-2 for k = i+1 to N-1
![Page 34: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/34.jpg)
5 ...______________
723 41672542996 3615
----552 ...etc
Assignment 1 division question: hint
You need to rethink what you are doing. Don’t just try to blindly code what you learned in grade school.
![Page 35: Sorting a List - McGill CIMlanger/250/7-quadratic-sorting-slides.pdfSorting a List: bubble sort selection sort insertion sort Sept. 22, 2017 3 17 -5 -2 23 4 -5-2 3 4 17 23 Sorting](https://reader030.vdocument.in/reader030/viewer/2022020411/5ac6cb327f8b9a40728b603a/html5/thumbnails/35.jpg)
35
Quiz 1 on Monday on mycourses
8 AM to 8 PM
No discussion during that time.
Email me if there is a problem.
Solutions, grades, feedback will be posted after.