Pigeonhole sort
From Wikipedia, the free encyclopedia
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 Θ(n + N) time.
The pigeonhole algorithm works as follows:
- Set up an array of initially empty "pigeonholes", one pigeonhole for each value in the range of keys. Each pigeonhole will contain a list of values having that key.
- Go over the original array, adding each object to the list in its pigeonhole.
- Iterate over the pigeonhole array in order, and put elements from non-empty holes 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; but the elements never leave the input array.
For arrays where N is much larger than n, bucket sort is a generalization that is more efficient in space and time.
[edit] References
|