Vous êtes sur la page 1sur 17

# Data Structures and Algorithms

## Prof. Ganesh Ramakrishnan,

Prof. Ajit Diwan,
Prof. D.B. Phatak

IIT Bombay

Sorting

IIT Bombay

## Sorted List-based (Insertion Sort)

 inserti (e, P ): Scan list and insert in order to maintain increasing order of list P
I

1 + 2 + . . . n = O(n2 )

 delete(P, m): Remove the (min) element m at the beginning of the list P
I

O(n)

 O(n2 ) overall

Sorting

IIT Bombay

## Array-based in-place version of Insertion Sort

Algorithm Insertion-Sort(S)
Input: Array S
Output: Array S sorted in increasing order
i = 1, n = length(S)
repeat
1. k = S[i]
//Insert k into the sorted array S[1 . . . i 1]
2. j = i 1
while j > 0 and S[j] > k do
1. S[j + 1] = S[j]
2. j = j 1
end while
S[j + 1] = k
until i > n
Figure: In-place Insertion Sort

Sorting

IIT Bombay

##  Algorithm maintains following loop invariant:

I

At start of each iteration of ith repeat loop, the subarray S[1 . . . i 1] consists of
the elements of the old S[1 . . . i 1] but sorted in ascending order

Sorting

IIT Bombay

## Analysis of in-place Insertion Sort

Algorithm Insertion-Sort(S)
Input: Array S
Output: Array S sorted in increasing order
c1
1 times
i = 1, n = length(S) =
repeat
c2
n 1 times
1. k = S[i] =
//Insert k into the sorted array S[1 . . . i 1]
c3
n 1 times
2. j = i 1 =
while j > 0 and S[j] > k do
n
X
c4

(wi 1) times
1. S[j + 1] = S[j] =
i=2

2. j = j 1

c5

n
X

(wi 1) times

i=2

end while

c6

n
X

wi times

i=2

S[j + 1] = k
until i > n =

=
c8

c7
n 1 times
n times

## Figure: wi is number of iterations of the inner while loop.

Prof. Ganesh Ramakrishnan, Prof. Ajit Diwan, Prof. D.B. Phatak
Sorting

IIT Bombay

## Analysis of in-place Insertion Sort

Algorithm Insertion-Sort(S)
Input: Array S
Output: Array S sorted in increasing order
c1
1 times
i = 1, n = length(S) =
repeat
c2
n 1 times
1. k = S[i] =
//Insert k into the sorted array S[1 . . . i 1]
c3
n 1 times
2. j = i 1 =
while j > 0 and S[j] > k do
n
X
c4

(wi 1) times
1. S[j + 1] = S[j] =
i=2

2. j = j 1

c5

n
X

(wi 1) times

i=2

end while

c6

n
X

wi times

i=2

S[j + 1] = k
until i > n =

=
c8

c7
n 1 times
n times

## Figure: wi is number of iterations ofPthe inner while loop.

Pn
Pn
n
T (n) = c1 +c2 (n1)+c3 (n1)+c4 i=2 (wi 1)+c5 i=2 (wi 1)+c6 i=2 wi +c7 (n1)+c8 n
Prof. Ganesh Ramakrishnan, Prof. Ajit Diwan, Prof. D.B. Phatak
Sorting

IIT Bombay

## Analysis of in-place Insertion Sort

 T (n)
P = c1 + c2 (n 1) + c3 (n 1) + c4
c6 ni=2 wi + c7 (n 1) + c8 n
 Best Case Running Time:

Sorting

Pn

i=2 (wi

1) + c5

Pn

i=2 (wi

1) +

IIT Bombay

## Analysis of in-place Insertion Sort

 T (n)
P = c1 + c2 (n 1) + c3 (n 1) + c4
c6 ni=2 wi + c7 (n 1) + c8 n
 Best Case Running Time:
I
I

i=2 (wi

1) + c5

Pn

i=2 (wi

1) +

## If S[1 . . . n] is already sorted, wi = 1 for i = 2 . . . n

= T (n) = c1 + c2 (n 1) + c3 (n 1) + c6 (n 1) + c7 (n 1) + c8 n =
c1 + n(c2 + c3 + c6 + c7 + c8 ) (c2 + c3 + c6 + c7 ) = O(n)

Sorting

Pn

IIT Bombay

## Analysis of in-place Insertion Sort

 T (n)
P = c1 + c2 (n 1) + c3 (n 1) + c4
c6 ni=2 wi + c7 (n 1) + c8 n
 Best Case Running Time:
I
I

Pn

i=2 (wi

1) + c5

Pn

i=2 (wi

1) +

## If S[1 . . . n] is already sorted, wi = 1 for i = 2 . . . n

= T (n) = c1 + c2 (n 1) + c3 (n 1) + c6 (n 1) + c7 (n 1) + c8 n =
c1 + n(c2 + c3 + c6 + c7 + c8 ) (c2 + c3 + c6 + c7 ) = O(n)

Sorting

IIT Bombay

## Analysis of in-place Insertion Sort

 T (n)
P = c1 + c2 (n 1) + c3 (n 1) + c4
c6 ni=2 wi + c7 (n 1) + c8 n
 Best Case Running Time:
I
I

Pn

i=2 (wi

1) + c5

Pn

i=2 (wi

1) +

## If S[1 . . . n] is already sorted, wi = 1 for i = 2 . . . n

= T (n) = c1 + c2 (n 1) + c3 (n 1) + c6 (n 1) + c7 (n 1) + c8 n =
c1 + n(c2 + c3 + c6 + c7 + c8 ) (c2 + c3 + c6 + c7 ) = O(n)

I
I

## If S[1 . . . n] is sorted in reverse order, wi = i 

for i = 2. . . n 

= T (n) = c1 + c2 (n 1) + c3 (n 1) + c4 n(n1)
+ c5 n(n1)
+
2
2


c6 n(n+1)
1 + c7 (n 1) + c8 n = O(n2 )
2

##  How about the average case?

Prof. Ganesh Ramakrishnan, Prof. Ajit Diwan, Prof. D.B. Phatak
Sorting

IIT Bombay

##  A swap in insertion sort: S[j + 1] = S[j] followed by S[j + 1] = k

 A swap occurs for each inversion:
I

An ordered pair of indices (i, j) into S is an inversion if i < j but S[i] > S[j]

##  Number of operations T (n) = time to scan each element + number of inversions

 I = number of inversions T (n) = O(n + I)

Sorting

IIT Bombay

##  A swap in insertion sort: S[j + 1] = S[j] followed by S[j + 1] = k

 A swap occurs for each inversion:
I

An ordered pair of indices (i, j) into S is an inversion if i < j but S[i] > S[j]

##  Number of operations T (n) = time to scan each element + number of inversions

 I = number of inversions T (n) = O(n + I)
 Claim: Average number of inversions in a list of n distinct elements is

Sorting

n(n1)
4

IIT Bombay

## Average number of Inversions

 Let Sr be the reverse of S.
 A pair of elements e1 and e2 will be inverted in exactly one of S and Sr
n(n1)
2
n(n1)
n!
2
2

##  Total number of such pairs inverted in one of S or Sr =

 Total number of inversions across all permutations =

Sorting

IIT Bombay

## Average number of Inversions

 Let Sr be the reverse of S.
 A pair of elements e1 and e2 will be inverted in exactly one of S and Sr
n(n1)
2
n!
inversions across all permutations = 2 n(n1)
2
of inversions I across all permutations = T otal
n! =

##  Total number of such pairs inverted in one of S or Sr =

 Total number of
 Average number
n(n1)
n!
2
2

n!

n(n1)
4

Sorting

IIT Bombay

## Average number of Inversions

 Let Sr be the reverse of S.
 A pair of elements e1 and e2 will be inverted in exactly one of S and Sr
n(n1)
2
n!
inversions across all permutations = 2 n(n1)
2
of inversions I across all permutations = T otal
n! =

##  Total number of such pairs inverted in one of S or Sr =

 Total number of
 Average number
n(n1)
n!
2
2

n!

n(n1)
4

 Average T (n) =
I

n(n1)
4

+ n = O(n2 )

True about ANY swap based algorithm, since swap removes exactly one inversion in
a single step.

Sorting

IIT Bombay

##  Best Case Running Time: S[1 . . . n] is already sorted = T (n) = O(n)

 Worst Case Running Time: S[1 . . . n] is sorted in reverse order =
T (n) = O(n2 )
 Average Case Running Time: T (n) = O(n2 )
 Can an alternative algorithm give better average and worst-case running times?

Sorting

IIT Bombay

Thank you

Sorting

IIT Bombay