Top Banner
Sorting - Insertion Sorting - Insertion Sort Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is based on code from the book: Java Structures by Duane A. Bailey or the companion structure package Revised 1/26/00
28

Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

Dec 21, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

Sorting - Insertion SortSorting - Insertion Sort

Cmput 115 - Lecture 11

Department of Computing Science

University of Alberta©Duane Szafron 2000

Some code in this lecture is based on code from the book:Java Structures by Duane A. Bailey or the companion structure package

Revised 1/26/00

Page 2: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

2

About This LectureAbout This Lecture

In this lecture we will learn about a sorting algorithm called the Insertion Sort.

We will study its implementation and its time and space complexity.

Page 3: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

3

OutlineOutline

The Insertion Sort Algorithm Insertion Sort - Arrays Time and Space Complexity of Insertion

Sort

Page 4: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

4

The Sort ProblemThe Sort Problem

Given a collection, with elements that can be compared, put the elements in increasing or decreasing order.

60 30 10 20 40 90 70 80 500 1 2 3 4 5 6 7 8

10 20 30 40 50 60 70 80 900 1 2 3 4 5 6 7 8

Page 5: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

5

Insertion Sort Algorithm Insertion Sort Algorithm 11

The lower part of the collection is sorted and the higher part is unsorted.

60 30 10 20 40 90 70 80 500 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 830 60 10 20 40 90 70 80 50

Insert the first element of the unsorted part into the correct place in the sorted part.

Page 6: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

6

Insertion Sort Algorithm Insertion Sort Algorithm 22

30 60 10 20 40 90 70 80 500 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 810 30 60 20 40 90 70 80 50

0 1 2 3 4 5 6 7 810 20 30 60 40 90 70 80 50

Page 7: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

7

Insertion Sort Algorithm Insertion Sort Algorithm 33

0 1 2 3 4 5 6 7 810 20 30 60 40 90 70 80 50

0 1 2 3 4 5 6 7 810 20 30 40 60 90 70 80 50

0 1 2 3 4 5 6 7 810 20 30 40 60 90 70 80 50

Page 8: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

8

Insertion Sort Algorithm Insertion Sort Algorithm 44

0 1 2 3 4 5 6 7 810 20 30 40 60 90 70 80 50

0 1 2 3 4 5 6 7 810 20 30 40 60 70 90 80 50

0 1 2 3 4 5 6 7 810 20 30 40 60 70 80 90 50

0 1 2 3 4 5 6 7 810 20 30 40 50 60 70 80 90

Page 9: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

9

Insertion Sort Code - Insertion Sort Code - ArraysArrays

public static void insertionSort(Comparable anArray[], int size) {

// pre: 0 <= size <= anArray.length// post: values in anArray are in ascending order

int index; //index of start of unsorted part

for (index = 1; index < size; index++) {this.moveElementAt(anArray, index);

}}

code based on Bailey pg. 83

Page 10: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

10

Moving Elements in Moving Elements in Insertion SortInsertion Sort

The Insertion Sort does not use an exchange operation.

When an element is inserted into the ordered part of the collection, it is not just exchanged with another element.

Several elements must be “moved”.

10 30 60 20

0 1 2 3

10 20 30 60

0 1 2 3

Page 11: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

11

Multiple Element ExchangesMultiple Element Exchanges

The naïve approach is to just keep exchanging the new element with its left neighbor until it is in the right location.

10 30 60 20

0 1 2 3

10 30 20 60

0 1 2 3

10 20 30 60

0 1 2 3

Every exchange costs three assignment operations. If we move the new element two spaces to the left, this

costs 2*3 = 6 assignment operations.

Page 12: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

12

Method - moveElementAt() Method - moveElementAt() - Arrays - Arrays

public static void moveElementAt(Comparable anArray[ ], int last) {

// pre: 0 <= last < anArray.length and anArray in// ascending order from 0 to last-1// post: anArray in ascending order from 0 to last

int temp; //A reference to the element being moved

while ((last>0) && (temp.compareTo.anArray[last-1]) < 0) {this.swap(anArray, last, last - 1);last--;

}}

code based on Bailey pg. 83

INEFFICIENT

Page 13: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

13

Avoiding Multiple ExchangesAvoiding Multiple Exchanges

We can insert the new element in the correct place with fewer assignment operations - only 4!

10 30 60 20

0 1 2 3

temp1

10 30 60 20

0 1 2 32

temp 10 30 60 20

0 1 2 33

temp

10 30 60 20

0 1 2 34

temp

In general if an element is moved (p) places it only takes (p + 2) assignment operations, not (3*p) assignment operations as required by (p) exchanges.

Page 14: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

14

Recall Element Insertion Recall Element Insertion in a Vectorin a Vector

This operation is similar to inserting a new element in a Vector.

Each existing element was “moved” to the right before inserting the new element in its correct location.

Page 15: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

15

Recall Vector Insertion CodeRecall Vector Insertion Code

public void insertElementAt(Object object, int index) {//pre: 0 <= index <= size()//post: inserts the given object at the given index,// moving elements from index to size()-1 to the right

int i;

this.ensureCapacity(this.elementCount + 1);for (i = this.elementCount; i > index; i--)

this.elementData[i] = this.elementData[i - 1];

this.elementData[index] = object;

this.elementCount++;

}

code based on Bailey pg. 39

Page 16: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

16

Differences from Differences from Element InsertionElement Insertion

In Vector element insertion:– We have a reference to the new element.

– We know the index location for the new element.

In the Insertion sort:– We don’t have a reference to the new element, only an

index in the array where the new element is currently located.

– We don’t know the index location for the new element. We need to find the index by comparing the new element with the elements in the collection from left to right.

Page 17: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

17

Method - moveElementAt() Method - moveElementAt() - Arrays - Arrays

public static void moveElementAt(Comparable anArray[], int last) {

// pre: 0 <= last < anArray.length and anArray in// ascending order from 0 to last-1.// post: anArray in ascending order from 0 to last // int move; //A reference to the element being moved

move = anArray[last];while ((last>0)

&& (move.compareTo.anArray[last-1]) < 0) {anArray[last] = anArray[last - 1];last--;

}anArray[last] = move; }

code based on Bailey pg. 83

Page 18: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

18

Counting ComparisonsCounting Comparisons How many comparison operations are required for an insertion

sort of an n-element collection? The sort method calls moveElementAt() in a loop for the

indexes: i = 1, 2, … n - 1.for (index = 1; index < size; index++) {

this.moveElementAt(anArray, index);

Each time moveElementAt() is executed for some argument, last, it does a comparison in a loop for some of the indexes: k, k-1, … 1.while ((last>0)

&& (temp.compareTo.anArray[last-1]) < 0) {anArray[last] = anArray[last - 1];last--; }

Page 19: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

19

Comparisons - Best CaseComparisons - Best Case In the best case there is 1 comparison per call

since the first comparison terminates the loop.while ((last>0) &&

(temp.compareTo.anArray[last-1]) < 0) {anArray[last] = anArray[last - 1];last--; }

move(a, 1) move(a, 2) move(a, n-1). . .

1 1 1

The total number of comparisons is:(n - 1) * 1 = n - 1 = O(n)

Page 20: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

20

Comparisons - Worst CaseComparisons - Worst Case In the worst case there are k comparisons per call

since the loop is not terminated until k == 0.while ((last>0) &&

(temp.compareTo.anArray[last-1]) < 0) {anArray[last] = anArray[last - 1];last--; }

move(a, 1) move(a, 2) move(a, n-1). . .

1 2 n-1

The total number of comparisons is:1 + 2 + … (n - 1) = [(n-1)*n] / 2 = O(n2)

Page 21: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

21

Comparisons - Average Case 1Comparisons - Average Case 1 In the average case it is equally probable that the number of

comparisons is any number between 1 and k inclusive for each call.while ((last>0) &&

(temp.compareTo.anArray[last-1]) < 0) {anArray[last] = anArray[last - 1];last--; }

move(a, 1) move(a, 2) move(a, n-1). . .

1 1 1

Note that the average for each call is: (1 + 2 + … k)/k = [k*(k+1)]/[2*k] = (k+1)/2

2 2 n-1. . .

Page 22: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

22

Comparisons - Average Case 2Comparisons - Average Case 2

In the average case, the total number of comparisons is:

(1+1)/2 + (2+1)/2 + … + ((n-1) + 1)/2 =1/2 + 1/2 + 2/2 + 1/2 + … + (n-1)/2 + 1/2 =[1 + 2 + … + (n-1)]*(1/2) + (n-1)*(1/2) =[ (n-1)*n/2]*(1/2) + (n-1)*(1/2) =[ (n-1)*n]*(1/4) + 2*(n-1)*(1/4) =[ (n-1)*n + 2*(n-1)]*(1/4) =[ (n-1)*(n + 2)]*(1/4) = O(n2)

Page 23: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

23

Counting Assignments 1Counting Assignments 1

How many assignment operations are required for an insertion sort of an n-element collection?

The sort method calls moveElementAt() in a loop for the indexes: k = 1, 2, … n - 1.

Every time the method is called, the element is moved one place for each successful comparison.

It requires p+2 assignment operations to move the new element p places.

Page 24: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

24

Assignments - Best CaseAssignments - Best Case

In the best case there is 1 comparison per call and it fails. This means there are 0 successful comparisons, so there are 0+2 = 2 assignments per call.

In the best case there is a total number of assignments: 2 *(n-1) = O(n). When will this happen?

Page 25: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

25

Exchanges - Worst CaseExchanges - Worst Case

In the worst case there are k comparisons per call and they all succeed. This results in k+2 assignments per call.

In the worst case there is a total number of assignments: (1+2) + (2+2) + … + (n-1+2) =3 + 4 + … + n+1 = [(n+1)*(n+2) - 3]/2 = O(n2)

Page 26: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

26

Assignments - AverageAssignments - Average

We have already seen that the average number of comparisons when inserting an element into a list of size k is: (k+1)/2(k+1)/2.

On average, half of the time, the last comparison succeeds and half of the time it fails so the average number of successful comparisons is:(k+1)/2 - (1/2) = (k/2)(k+1)/2 - (1/2) = (k/2)

Therefore, the average number of total assignmentsaverage number of total assignments is:1/2 + 2/2 + … + (n-1)/2 = [1 + 2 + … + (n-1)]*(1/2) [ (n-1)*n/2]*(1/2) = (n-1)*n/4 = O(n(n-1)*n/4 = O(n22))

Page 27: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

27

Time Complexity of Time Complexity of Insertion SortInsertion Sort

Best case O(n)Best case O(n) for comparisons and assignments.

Worst case O(nWorst case O(n22)) for comparisons and assignments.

Average case O(nAverage case O(n22)) for comparisons and assignments.

Note: this means that for nearly sorted nearly sorted collectionscollections, insertion sort is better than selection sort even though in average and worst cases, they are the same: O(nO(n22).).

Page 28: Sorting - Insertion Sort Cmput 115 - Lecture 11 Department of Computing Science University of Alberta ©Duane Szafron 2000 Some code in this lecture is.

©Duane Szafron 1999

28

Space Complexity of Space Complexity of Insertion SortInsertion Sort

Besides the collection itself, the only extra storage for this sort is the single temp single temp referencereference used in the move element method.

Therefore, the space complexity of Insertion Sort is O(n).O(n).