SOURCE FILE: insertSort.cpp
void InsertionSort(dataType A[], int N)
// ---------------------------------------------------
// Sorts the items in an array into ascending order.
// Precondition: A is an array of N items.
// Postcondition: The array A is sorted into ascending
// order; N is unchanged.
// ---------------------------------------------------
{
// Unsorted = first index of the unsorted region,
// Loc = index of insertion in the sorted region,
// NextItem = next item in the unsorted region
// initially, sorted region is A[0],
// unsorted region is A[1..N-1];
// in general, sorted region is A[0..Unsorted-1],
// unsorted region is A[Unsorted..N-1]
for (int Unsorted = 1; Unsorted < N; ++Unsorted)
{ // Invariant: A[0..Unsorted-1] is sorted
// find the right position (Loc) in
// A[0..Unsorted] for A[Unsorted], which is the
// first item in the unsorted region;
// shift, if necessary, to make room
dataType NextItem = A[Unsorted];
int Loc = Unsorted;
for (;(Loc > 0) && (A[Loc-1] > NextItem); --Loc)
// shift A[Loc-1] to the right
A[Loc] = A[Loc-1];
// Assertion: A[Loc] is where NextItem belongs
// insert NextItem into Sorted region
A[Loc] = NextItem;
} // end for
} // end InsertionSort