Sorting Algorithm Examples
This is a collection of programs implementing a wide variety of sorting
algorithms. The code has been optimized for speed instead of readability.
You will find them to perform better than the perspective standard algorithms.
The Combo Sort should be suitable for production usages.
These examples were constructed by studying the following text books:
- Robert Sedgewick, "Algorithms in C"
- Mark Allen Weiss, "Data Structures and Algorithm Analysis"
- Tenenbaum, Langsam, Augenstein, "Data Structures Using C"
Some short descriptions on each of the algorithms:
Bubble Sort
- Exchange two adjacent elements if they are out of order. Repeat until
array is sorted. This is a slow algorithm.
Selection Sort
- Find the largest element in the array, and put it in the proper place.
Repeat until array is sorted. This is also slow.
Insertion Sort
- Scan successive elements for out of order item, then insert the item
in the proper place. Sort small array fast, big array very slowly.
Quicksort
- Partition array into two segments. The first segment all elements are
less than or equal to the pivot value. The second segment all elements are
greater or equal to the pivot value. Sort the two segments recursively.
Quicksort is fastest on average, but sometimes unbalanced partitions can
lead to very slow sorting.
Mergesort
- Start from two sorted runs of length 1, merge into a single run of twice
the length. Repeat until a single sorted run is left. Mergesort needs
N/2 extra buffer. Performance is second place on average, with
quite good speed on nearly sorted array. Mergesort is stable in that
two elements that are equally ranked in the array will not have their relative
positions flipped.
Heapsort
- Form a tree with parent of the tree being larger than its children.
Remove the parent from the tree successively. On average, Heapsort is
third place in speed. Heapsort does not need extra buffer, and performance
is not sensitive to initial distributions.
Shellsort
- Sort every Nth element in an array using insertion sort. Repeat using
smaller N values, until N = 1. On average, Shellsort is fourth place in
speed. Shellsort may sort some distributions slowly.
Combo Sort
- Sorting algorithms can be mixed and matched to yield the desired
properties. We want fast average performance, good worst case performance,
and no large extra storage requirement. We can achieve the goal by starting
with the Quicksort (fastest on average). We modify Quicksort by sorting
small partitions by using Insertion Sort (best with small partition). If
we detect two partitions are badly balanced, we sort the larger partition
by Heapsort (good worst case performance). Of course we cannot undo the
bad partitions, but we can stop the possible degenerate case from continuing
to generate bad partitions.
Give feedbacks to wang@cup.hp.com