**Insertion Sort**

One of the simplest methods to sort an array is an insertion sort. An example of an insertion sort

occurs in everyday life while playing cards. To sort the cards in your hand you extract a card,

shift the remaining cards, and then insert the extracted card in the correct place. This process is

repeated until all the cards are in the correct sequence. Both average and worst-case time is

** O**(

*n*2). For further reading, consult Knuth [1998].

- 9 -

**Theory**

Starting near the top of the array in Figure 2-1(a), we extract the 3. Then the above elements are

shifted down until we find the correct place to insert the 3. This process repeats in Figure 2-1(b)

with the next number. Finally, in Figure 2-1(c), we complete the sort by inserting 2 in the

correct place.

4

1

2

4

3

1

2

4

1

2

3

4

1

2

3

4

2

3

4

1

2

3

4

2

1

3

4

2

1

3

4

1

3

4

2

1

3

4

1

2

3

4

_D_

_E_

_F_

**Figure 2-1: **Insertion Sort

Assuming there are *n *elements in the array, we must index through *n – *1 entries. For each

entry, we may need to examine and shift up to *n – *1 other entries, resulting in a ** O**(

*n*2) algorithm.

The insertion sort is an *in-place *sort. That is, we sort the array in-place. No extra memory is

required. The insertion sort is also a *stable *sort. Stable sorts retain the original ordering of keys

when identical keys are present in the input data.

**Implementation**

Source for the insertion sort algorithm may be found in file **ins.c**. Typedef **T **and comparison

operator **compGT **should be altered to reflect the data stored in the table.

## No comments:

Post a Comment