Selection Sort, Insertion Sort, Bubble, & Shellsort: CPS212, Gordon College
Selection Sort, Insertion Sort, Bubble, & Shellsort: CPS212, Gordon College
Selection Sort, Insertion Sort, Bubble, & Shellsort: CPS212, Gordon College
34 8 21 32
^
51 64
Repeat this process until unsorted list is empty
32 8 21 34 51 64
21 8 32 34 51 64
8 21 32 34 51 64
Insertion Sort
Insertion sort keeps making the left side of the array sorted until
the whole array is sorted. (Sorting cards in your hand)
Basic Algorithm:
Repeat the following steps until value in proper position
move it left.
It is the simplest of all sorting algorithms.
Although it has the same complexity as Bubble Sort, the
insertion sort is a little over twice as efficient as the bubble sort.
Insertion Sort
Real life example:
An example of an insertion sort occurs
in everyday life while playing cards. To
sort the cards in your hand you extract
a card, shift the remaining cards, and
then insert the extracted card in the
correct place. This process is repeated
until all the cards are in the correct
sequence.
Insertion Sort runtimes
Best case: O(n) It occurs when the data is
in sorted order. After making one pass
through the data and making no
insertions, insertion sort exits.
Average case: (n^2) since there is a
wide variation with the running time.
Worst case: O(n^2) if the numbers were
sorted in reverse order.
Empirical Analysis of Insertion Sort
Source: http://linux.wku.edu/~lamonml/algor/sort/insertion.html
Insertion Sort
The insertion sort is a good choice for
sorting lists of a few thousand items or
less.
Insertion Sort
The insertion sort shouldn't be used for
sorting lists larger than a couple
thousand items or repetitive sorting of
lists larger than a couple hundred items.
Insertion Sort
This algorithm is much simpler than the
shell sort, with only a small trade-off in
efficiency. At the same time, the
insertion sort is over twice as fast as the
bubble sort.
Insertion Sort Overview
Advantage of Insertion Sort is that it is
relatively simple and easy to implement.
Disadvantage of Insertion Sort is that it
is not efficient to operate with a large list
or input size.
Insertion Sort Example
Sort: 34 8 64 51 32 21
34 8 64 51 32 21
Pull out 8 into Temp
34 8 64 51 32 21
Compare 34 and 8 - move 34 up a spot
34 34 64 51 32 21
Spot is found for 8 - place it where it belongs
8 34 64 51 32 21
Insertion Sort Example
Sort: 34 8 64 51 32 21
8 34 64 51 32 21
Pull out 64 into Temp
8 34 64 51 32 21
Compare 64 and 34 - place 64 back into slot 2
8 34 64 51 32 21
Insertion Sort Example
Sort: 34 8 64 51 32 21
8 34 64 51 32 21
Pull out 51 into Temp
8 34 64 51 32 21
Compare 51 and 64 - move 64 to the right
8 34 64 64 32 21
Compare 51 and 34 - place 51 into slot 2
8 34 51 64 32 21
Insertion Sort Example
Sort: 34 8 64 51 32 21
8 34 51 64 32 21
Pull out 32 into Temp
8 34 51 64 32 21
Compare 32 and 64 - move 64 to the right
8 34 51 64 64 21
Compare 32 and 51 - move 51 to the right
8 34 51 51 64 21
Compare 32 and 34 - move 34 to the right
8 34 34 51 64 21
Compare 32 and 8 - place 32 in slot 1
8 32 34 51 64 21
What comes next?
Bubble sort
Works by repeatedly stepping through the list to be sorted, comparing
two items at a time and swapping them if they are in the wrong order.
The pass through the list is repeated until no swaps are needed, which
indicates that the list is sorted.
Sort: 34 8 64 51 32 21
Pass 1 Pass 2
34 8 64 51 32 21 8 34 51 32 21 64 Worst and average - O(n^2)
8 34 64 51 32 21 8 34 51 32 21 64
8 34 51 64 32 21 8 34 51 32 21 64
8 34 51 32 64 21 8 34 32 51 21 64 Not practical for list with large n -
8 34 51 32 21 64 8 34 32 21 51 64 except when list is very close to
8 34 32 21 51 64 sorted
Repeat until no swaps are made.
Shellsort
Invented by Donald Shell in 1959.
1st algorithm to break the quadratic
time barrier but few years later, a sub
quadratic time bound was proven
Shellsort works by comparing
elements that are distant rather than
adjacent elements in an array.
Shellsort
Shellsort uses a sequence h1, h2, …, ht
called the increment sequence. Any
increment sequence is fine as long as
h1 = 1 and some other choices are
better than others.
Shellsort
Shellsort makes multiple passes
through a list and sorts a number of
equally sized sets using the insertion
sort.
Shellsort
Shellsort improves on the efficiency of
insertion sort by quickly shifting values
to their destination.
Shellsort
Shellsort is also known as diminishing
increment sort.
The distance between comparisons
decreases as the sorting algorithm runs
until the last phase in which adjacent
elements are compared
Shellsort
After each phase and some increment
hk, for every i, we have a[ i ] ≤ a [ i + hk ]
all elements spaced hk apart are sorted.
The file is said to be hk – sorted.
Empirical Analysis of Shellsort
Source: http://linux.wku.edu/~lamonml/algor/sort/shell.html
Empirical Analysis of Shellsort
(Advantage)
Advantage of Shellsort is that its only
efficient for medium size lists. For
bigger lists, the algorithm is not the best
choice. Fastest of all O(N^2) sorting
algorithms.
5 times faster than the bubble sort and
a little over twice as fast as the insertion
sort, its closest competitor.
Empirical Analysis of Shellsort
(Disadvantage)
Disadvantage of Shellsort is that it is a
complex algorithm and its not nearly as
efficient as the merge, heap, and quick sorts.
The shell sort is still significantly slower than
the merge, heap, and quick sorts, but its
relatively simple algorithm makes it a good
choice for sorting lists of less than 5000 items
unless speed important. It's also an excellent
choice for repetitive sorting of smaller lists.
Shellsort Best Case
Best Case: The best case in the shell
sort is when the array is already sorted
in the right order. The number of
comparisons is less.
Shellsort Worst Case
The running time of Shellsort depends
on the choice of increment sequence.
The problem with Shell’s increments is
that pairs of increments are not
necessarily relatively prime and smaller
increments can have little effect.
Shellsort Examples
Sort: 18 32 12 5 38 33 16 2
8 Numbers to be sorted, Shell’s increment will be floor(n/2)
* floor(8/2) floor(4) = 4
18 32 12 5 38 33 16 2
* floor(8/2) floor(4) = 4
18 32 12 5 38 33 16 2
increment 2: 1 2
18 32 12 2 38 33 16 5
Step 1) Look at 18, 12, 38, 16 and sort them in their appropriate location:
12 38 16 2 18 33 38 5
Step 2) Look at 32, 2, 33, 5 and sort them in their appropriate location:
12 2 16 5 18 32 38 33
Shellsort Examples (con’t)
Sort: 18 32 12 5 38 33 16 2
* floor(2/2) floor(1) = 1
increment 1: 1
12 2 16 5 18 32 38 33
2 5 12 16 18 32 33 38