Insertion SortInsertion Sort Parosh Aziz Abdulla Uppsala University August 27, 2010 Parosh Aziz...

Post on 02-Jun-2020

8 views 0 download

Transcript of Insertion SortInsertion Sort Parosh Aziz Abdulla Uppsala University August 27, 2010 Parosh Aziz...

Insertion Sort

Parosh Aziz Abdulla

Uppsala University

August 27, 2010

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 1 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 4

6 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 4

6 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 3 5 1 2 46 3 5 1 2 4

j = 2

i

6 5 1 2 4

3

j = 2

i

6 5 1 2 4

3

j = 2

3 6 5 1 2 4

j = 2

3 6 5 1 2 4

j = 3

i

3 6 1 2 4

5

j = 3

i

3 6 1 2 4

5

j = 3

3 5 6 1 2 4

j = 3

3 5 6 1 2 4

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

i

3 5 6 2 4

1

j = 4

1 3 5 6 2 4

j = 4

1 3 5 6 2 4

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

i

1 3 5 6 4

2

j = 5

1 2 3 5 6 4

j = 5

1 2 3 5 6 4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

i

1 2 3 5 6

4

j = 6

1 2 3 4 5 6

j = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 2 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A]

..................................... c1 n

2 do key ← A[j]

......................................... c2 n − 1

3 � Insert A[j] into A[1 . . j − 1].

........... 0 n − 1

4 i ← j − 1

............................................ c4 n − 1

5 while i > 0 and A[i ] > key

.................. c5n∑

j=2

tj

6 do A[i + 1]← A[i ]

........................ c6n∑

j=2

(tj − 1

)

7 i ← i − 1

................................. c7n∑

j=2

(tj − 1

)

8 A[i + 1]← key

.................................... c8 n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A] ..................................... c1

n

2 do key ← A[j] ......................................... c2

n − 1

3 � Insert A[j] into A[1 . . j − 1]. ........... 0

n − 1

4 i ← j − 1 ............................................ c4

n − 1

5 while i > 0 and A[i ] > key .................. c5

n∑j=2

tj

6 do A[i + 1]← A[i ] ........................ c6

n∑j=2

(tj − 1

)

7 i ← i − 1 ................................. c7

n∑j=2

(tj − 1

)

8 A[i + 1]← key .................................... c8

n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A] ..................................... c1 n

2 do key ← A[j] ......................................... c2

n − 1

3 � Insert A[j] into A[1 . . j − 1]. ........... 0

n − 1

4 i ← j − 1 ............................................ c4

n − 1

5 while i > 0 and A[i ] > key .................. c5

n∑j=2

tj

6 do A[i + 1]← A[i ] ........................ c6

n∑j=2

(tj − 1

)

7 i ← i − 1 ................................. c7

n∑j=2

(tj − 1

)

8 A[i + 1]← key .................................... c8

n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A] ..................................... c1 n

2 do key ← A[j] ......................................... c2 n − 1

3 � Insert A[j] into A[1 . . j − 1]. ........... 0

n − 1

4 i ← j − 1 ............................................ c4

n − 1

5 while i > 0 and A[i ] > key .................. c5

n∑j=2

tj

6 do A[i + 1]← A[i ] ........................ c6

n∑j=2

(tj − 1

)

7 i ← i − 1 ................................. c7

n∑j=2

(tj − 1

)

8 A[i + 1]← key .................................... c8

n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A] ..................................... c1 n

2 do key ← A[j] ......................................... c2 n − 1

3 � Insert A[j] into A[1 . . j − 1]. ........... 0 n − 1

4 i ← j − 1 ............................................ c4

n − 1

5 while i > 0 and A[i ] > key .................. c5

n∑j=2

tj

6 do A[i + 1]← A[i ] ........................ c6

n∑j=2

(tj − 1

)

7 i ← i − 1 ................................. c7

n∑j=2

(tj − 1

)

8 A[i + 1]← key .................................... c8

n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A] ..................................... c1 n

2 do key ← A[j] ......................................... c2 n − 1

3 � Insert A[j] into A[1 . . j − 1]. ........... 0 n − 1

4 i ← j − 1 ............................................ c4 n − 1

5 while i > 0 and A[i ] > key .................. c5

n∑j=2

tj

6 do A[i + 1]← A[i ] ........................ c6

n∑j=2

(tj − 1

)

7 i ← i − 1 ................................. c7

n∑j=2

(tj − 1

)

8 A[i + 1]← key .................................... c8

n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A] ..................................... c1 n

2 do key ← A[j] ......................................... c2 n − 1

3 � Insert A[j] into A[1 . . j − 1]. ........... 0 n − 1

4 i ← j − 1 ............................................ c4 n − 1

5 while i > 0 and A[i ] > key .................. c5n∑

j=2

tj

6 do A[i + 1]← A[i ] ........................ c6

n∑j=2

(tj − 1

)

7 i ← i − 1 ................................. c7

n∑j=2

(tj − 1

)

8 A[i + 1]← key .................................... c8

n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A] ..................................... c1 n

2 do key ← A[j] ......................................... c2 n − 1

3 � Insert A[j] into A[1 . . j − 1]. ........... 0 n − 1

4 i ← j − 1 ............................................ c4 n − 1

5 while i > 0 and A[i ] > key .................. c5n∑

j=2

tj

6 do A[i + 1]← A[i ] ........................ c6n∑

j=2

(tj − 1

)7 i ← i − 1 ................................. c7

n∑j=2

(tj − 1

)

8 A[i + 1]← key .................................... c8

n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A] ..................................... c1 n

2 do key ← A[j] ......................................... c2 n − 1

3 � Insert A[j] into A[1 . . j − 1]. ........... 0 n − 1

4 i ← j − 1 ............................................ c4 n − 1

5 while i > 0 and A[i ] > key .................. c5n∑

j=2

tj

6 do A[i + 1]← A[i ] ........................ c6n∑

j=2

(tj − 1

)7 i ← i − 1 ................................. c7

n∑j=2

(tj − 1

)8 A[i + 1]← key .................................... c8

n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Cost Analysis

Insertion-Sort(A) cost times

1 for j ← 2 to length[A] ..................................... c1 n

2 do key ← A[j] ......................................... c2 n − 1

3 � Insert A[j] into A[1 . . j − 1]. ........... 0 n − 1

4 i ← j − 1 ............................................ c4 n − 1

5 while i > 0 and A[i ] > key .................. c5n∑

j=2

tj

6 do A[i + 1]← A[i ] ........................ c6n∑

j=2

(tj − 1

)7 i ← i − 1 ................................. c7

n∑j=2

(tj − 1

)8 A[i + 1]← key .................................... c8 n − 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 3 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Best Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

1 2 3 4 5 6

j = 2

i

1 3 4 5 6

j = 2

2

1 2 3 4 5 6

j = 2

tj = 1

1 2 3 4 5 6

j = 3

i

1 2 4 5 6

j = 3

3

1 2 3 4 5 6

j = 3

tj = 1

1 2 3 4 5 6

j = 4

i

1 2 3 5 6

j = 4

4

1 2 3 4 5 6

j = 4

tj = 1

1 2 3 4 5 6

j = 5

i

1 2 3 4 6

j = 5

5

1 2 3 4 5 6

j = 5

tj = 1

1 2 3 4 5 6

j = 6

i

1 2 3 4 5

j = 6

6

1 2 3 4 5 6

j = 6

tj = 1

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 4 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Worst Case

Insertion-Sort(A)

1 for j ← 2 to length[A]2 do key ← A[j]3 � Insert A[j] into A[1 . . j − 1].4 i ← j − 15 while i > 0 and A[i ] > key6 do A[i + 1]← A[i ]7 i ← i − 18 A[i + 1]← key

6 5 4 3 2 1

j = 2

i

6 4 3 2 1

5

j = 2

i

6 4 3 2 1

5

j = 2

5 6 4 3 2 1

j = 2

tj = 2

5 6 4 3 2 1

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

i

5 6 3 2 1

4

j = 3

4 5 6 3 2 1

j = 3

tj = 3

4 5 6 3 2 1

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

i

4 5 6 2 1

3

j = 4

3 4 5 6 2 1

j = 4

tj = 4

3 4 5 6 2 1

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

i

3 4 5 6 1

2

j = 5

2 3 4 5 6 1

j = 5

tj = 5

2 3 4 5 6 1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

i

2 3 4 5 6

1

j = 6

1 2 3 4 5 6

j = 6

tj = 6tj = 6

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 5 / 6

Insertion Sort - Average Case

1 3 6 8 8 9 7 6

j = 7

1 3 6 8 8 9 6

7

j = 7

1 3 6 8 8 9 6

7

j = 7

1 3 6 7 8 8 9 6

j = 7

tj ≈ j2

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 6 / 6

Insertion Sort - Average Case

1 3 6 8 8 9 7 6

j = 7

1 3 6 8 8 9 6

7

j = 7

1 3 6 8 8 9 6

7

j = 7

1 3 6 7 8 8 9 6

j = 7

tj ≈ j2

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 6 / 6

Insertion Sort - Average Case

1 3 6 8 8 9 7 6

j = 7

1 3 6 8 8 9 6

7

j = 7

1 3 6 8 8 9 6

7

j = 7

1 3 6 7 8 8 9 6

j = 7

tj ≈ j2

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 6 / 6

Insertion Sort - Average Case

1 3 6 8 8 9 7 6

j = 7

1 3 6 8 8 9 6

7

j = 7

1 3 6 8 8 9 6

7

j = 7

1 3 6 7 8 8 9 6

j = 7

tj ≈ j2

Parosh Aziz Abdulla (Uppsala University) Insertion Sort August 27, 2010 6 / 6