Pigeonhole sort

Share on Facebook Share on Twitter Email
Top

A sorting technique that is used when the range of keys is relatively small. An array of pigeonholes (buckets, chunks of memory) is reserved for each possible key value. The records from the unsorted list are scanned and copied into their respective pigeonholes based on their key values. Then, the contents of the pigeonholes are copied in sequence to the final destination. See sort algorithm.

Pigeonhole Sort and Counting Sort
In the first pass, after copying the records into their appropriate pigeonholes based on key values, the data wind up sorted. The "counting sort" method is an alternate technique that uses an array of counters based on key values. The values in the counters are used to rearrange the data (see counting sort).

Download Computer Desktop Encyclopedia to your PC, iPhone or Android.

Top
Pigeonhole sort
Class Sorting algorithm
Data structure Array
Worst case performance O(N + n), where N is the range of key values and n is the input size
Worst case space complexity O(N + n)

Pigeonhole sorting, also known as count sort (not to be confused with counting sort), is a sorting algorithm that is suitable for sorting lists of elements where the number of elements (n) and the number of possible key values (N) are approximately the same.[1] It requires O(n + N) time.

The pigeonhole algorithm works as follows:

  1. Given an array of values to be sorted, set up an auxiliary array of initially empty "pigeonholes," one pigeonhole for each key through the range of the original array.
  2. Going over the original array, put each value into the pigeonhole corresponding to its key, such that each pigeonhole eventually contains a list of all values with that key.
  3. Iterate over the pigeonhole array in order, and put elements from non-empty pigeonholes back into the original array.

For example, suppose we were sorting these value pairs by their first element:

  • (5, "hello")
  • (3, "pie")
  • (8, "apple")
  • (5, "king")

For each value between 3 and 8 we set up a pigeonhole, then move each element to its pigeonhole:

  • 3: (3, "pie")
  • 4:
  • 5: (5, "hello"), (5, "king")
  • 6:
  • 7:
  • 8: (8, "apple")

We then iterate over the pigeonhole array in order and move them back to the original list.

The difference between pigeonhole sort and counting sort is that in counting sort, the auxiliary array does not contain lists of input elements, only counts:

  • 3: 1
  • 4: 0
  • 5: 2
  • 6: 0
  • 7: 0
  • 8: 1

Using this information we can perform a series of exchanges on the input array that puts it in order, moving items only once. Pigeonhole sort, in contrast, moves items twice: once onto the pigeonhole/bucket array and again onto the destination array. [2]

For arrays where N is much larger than n, bucket sort is a generalization that is more efficient in space and time.

See also

References

  1. ^ NIST's Dictionary of Algorithms and Data Structures: pigeonhole sort
  2. ^ Black, Paul E. (2006-06-19). ""pigeonhole sort", in Dictionary of Algorithms and Data Structures [online"]. U.S. National Institute of Standards and Technology. http://www.itl.nist.gov/div897/sqg/dads/HTML/pigeonholeSort.html. Retrieved 2009-04-26. 

Post a question - any question - to the WikiAnswers community:

Copyrights:

Mentioned in