The document presents the selection sort and insertion sort algorithms. It demonstrates how selection sort works by repeatedly finding the smallest element in the unsorted portion of the array and swapping it into the sorted portion. It also shows how insertion sort inserts one element at a time into the sorted portion by shifting larger elements to make room. Both algorithms view the array as having a sorted portion that grows gradually as elements are added from the unsorted portion.
1 of 35
Download to read offline
More Related Content
DSSchapt13.ppt
1. ? Chapter 13 presents several
common algorithms for
sorting an array of integers.
? Two slow but simple
algorithms are
Selectionsort and
Insertionsort.
? This presentation
demonstrates how the two
algorithms work.
Quadratic Sorting
Data Structures
and Other Objects
Using C++
2. Sorting an Array of Integers
? The picture
shows an
array of six
integers that
we want to
sort from
smallest to
largest
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
12. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Selectionsort Algorithm
? The process
continues...
Sorted side Unsorted side
Sorted side
is bigger
[0] [1] [2] [3] [4] [5]
13. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Selectionsort Algorithm
? The process
keeps adding
one more
number to the
sorted side.
? The sorted side
has the smallest
numbers,
arranged from
small to large.
Sorted side Unsorted side
[0] [1] [2] [3] [4] [5]
14. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Selectionsort Algorithm
? We can stop
when the
unsorted side
has just one
number, since
that number
must be the
largest number.
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted sid
15. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Selectionsort Algorithm
? The array is
now sorted.
? We repeatedly
selected the
smallest
element, and
moved this
element to the
front of the
unsorted side. [0] [1] [2] [3] [4] [5]
16. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Insertionsort Algorithm
? The
Insertionsort
algorithm
also views
the array as
having a
sorted side
and an
unsorted
side. [0] [1] [2] [3] [4] [5]
17. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Insertionsort Algorithm
? The sorted
side starts
with just the
first
element,
which is not
necessarily
the smallest
element. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted side
18. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Insertionsort Algorithm
? The sorted
side grows
by taking the
front
element
from the
unsorted
side...
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted side
19. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Insertionsort Algorithm
? ...and
inserting it
in the place
that keeps
the sorted
side
arranged
from small
to large. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted side
20. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Insertionsort Algorithm
? In this
example, the
new element
goes in front
of the
element that
was already
in the sorted
side. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted side
21. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Insertionsort Algorithm
? Sometimes
we are lucky
and the new
inserted item
doesn't need
to move at
all.
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted side
22. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
The Insertionsort Algorithm
? Sometimes
we are lucky
twice in a
row.
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted side
23. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
How to Insert One Element
? Copy the
new element
to a separate
location.
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
3] [4] [5] [6]
3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted side
24. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
How to Insert One Element
? Shift
elements in
the sorted
side,
creating an
open space
for the new
element.
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
3] [4] [5] [6]
3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
25. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
How to Insert One Element
? Shift
elements in
the sorted
side,
creating an
open space
for the new
element.
3] [4] [5] [6]
3] [4] [5] [6]
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
28. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
How to Insert One Element
? ...until you
reach the
location for
the new
element.
3] [4] [5] [6]
3] [4] [5] [6]
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
29. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
How to Insert One Element
? Copy the
new element
back into the
array, at the
correct
location.
3] [4] [5] [6]
3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted sid
30. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
How to Insert One Element
3] [4] [5] [6]
3] [4] [5] [6]
? The last
element
must also be
inserted.
Start by
copying it...
[0] [1] [2] [3] [4] [5]
Sorted side Unsorted sid
31. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
A Quiz
[1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
How many
shifts will
occur before we
copy this
element back
into the array?
3] [4] [5] [6]
3] [4] [5] [6]
[0] [1] [2] [3] [4] [5]
33. [1] [2] [3] [4] [5] [6]
0
10
20
30
40
50
60
70
[1] [2] [3] [4] [5] [6]
A Quiz
3] [4] [5] [6]
3] [4] [5] [6]
? Four items
are shifted.
?And then
the element is
copied back
into the array.
[0] [1] [2] [3] [4] [5]
34. ? Both Selectionsort and Insertionsort have a worst-
case time of O(n2), making them impractical for
large arrays.
? But they are easy to program, easy to debug.
? Insertionsort also has good performance when the
array is nearly sorted to begin with.
? But more sophisticated sorting algorithms are
needed when good performance is needed in all
cases for large arrays.
Timing and Other Issues
35. THE END
Presentation copyright 2010 Addison Wesley Longman,
For use with Data Structures and Other Objects Using C++
by Michael Main.
Some artwork in the presentation is used with permission from Presentation Task Force
(copyright New Vision Technologies Inc) and Corel Gallery Clipart Catalog (copyright
Corel Corporation, 3G Graphics Inc, Archive Arts, Cartesia Software, Image Club
Graphics Inc, One Mile Up Inc, TechPool Studios, Totem Graphics Inc).
Students and instructors who use Data Structures and Other Objects Using Java are welcome
to use this presentation however they see fit, so long as this copyright notice remains
intact.