Insertion Sort
Insertion sort is an elementary sort that works by
visiting each item
in the array - starting
from the first
and comparing
it to it's predecesors
. If the predecesor
is
greater
than the item, it swaps - inverts
their places
. It
continues
to do so until
it finds an element
which is
less
than the item.
Time complexity
To sort a randomly-ordered array with distinct keys, insertion
sort uses~1/4 N
2
compares and
~1/4 N
2
exchanges on average.
Best case: if comparing to ascending order and the array is
already sorted it makes N-1
compares and 0
exchanges.
Worst case: if the array is in descending order (and no
duplicates) insertion sort makes ~1/2 N
2
compares
and ~1/2 N
2
exchanges.
For a partially sorted array; an array where the
numbers of inversions
is <= c * N
, i.e linear
, insertion
sort runs in linear time
.
Sample typescript
implementation for sorting numbers in
ascending order.
function insertionSort(numbers: number[]): void {
for (let i = 0; i < numbers.length; i++) {
for (let j = i; j - 1 >= 0; j--) {
if (numbers[j] < numbers[j - 1]) {
// Swap them
const tmp = numbers[j];
numbers[j] = numbers[j - 1];
numbers[j - 1] = tmp;
} else {
// All the elements on the left are less than
// continue to the next item
break;
}
}
}
}