@*Insertion Sort. @ Introduction and Description. {\bf[Input]:} A list of objects. {\bf[Output]:} The sorted list of all objects passed as input. @ Algorithm. The algorithm is exactly the same as the algorithm people intuitively use to sort a deck of cards. Each time take the smallest or largest object and put it at the end of the smallest already sorted sub-list of the original list. @= template void insertion_sort(RandomAccessIter first, RandomAccessIter last) { // starts from the seond element in list upto last element typename std::iterator_traits::value_type key; for (RandomAccessIter iter = first + 1; iter != last + 1; ++iter) { key = *iter; RandomAccessIter i = iter - 1; while ((key < *i) && (i != first)) { *(i + 1) = *i; --i; } // while key and i *(i + 1) = key; } // for iter } // end of |insertion_sort()| template void insertion_sort(RandomAccessIter first, RandomAccessIter last, Compare cmp) { // starts from the seond element in list upto last element typename std::iterator_traits::value_type key; for (RandomAccessIter iter = first + 1; iter != last + 1; ++iter) { key = *iter; RandomAccessIter i = iter - 1; while (pred(key, *i) && (i != first)) { *(i + 1) = *i; --i; } // while key and i *(i + 1) = key; } // for iter } // end of |insertion_sort()| @ @= #include #include @ @c @ @ // a simple test of the |insertion_sort| function int main() { int lst_tmp[10]; for (int i = 0; i != 10; ++i) lst_tmp[i] = (3 * i) % 10; insertion_sort(lst_tmp, lst_tmp + 9); for (int i = 0; i != 10; ++i) std::cout << lst_tmp[i] << std::endl; return 0; }