Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Pigeonhole sort

From Wikipedia, the free encyclopedia
Sorting algorithm
icon
This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed.
Find sources: "Pigeonhole sort" – news ·newspapers ·books ·scholar ·JSTOR
(July 2017) (Learn how and when to remove this message)


Pigeonhole sort
ClassSorting algorithm
Data structureArray
Worst-caseperformanceO(N+n){\displaystyle O(N+n)}, whereN is the range of key values andn is the input size
Worst-casespace complexityO(N+n){\displaystyle O(N+n)}
OptimalIf and only ifN=O(n){\displaystyle N=O(n)}

Pigeonhole sorting is asorting algorithm that is suitable for sorting lists of elements where the numbern of elements and the lengthN of the range of possible key values are approximately the same.[1] It requiresO(n +N) time. It is similar tocounting sort, but differs in that it "moves items twice: once to the bucket array and again to the final destination [whereas] counting sort builds an auxiliary array then uses the array to compute each item's final destination and move the item there."[2]

The pigeonhole algorithm works as follows:

  1. Given an array of values to be sorted, set up an auxiliary array of initially empty "pigeonholes" (analogous to apigeon-hole messagebox in an office or desk), one pigeonhole for each key in therange of the keys in 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 increasing order of keys, and for each pigeonhole, put its elements into the original array in increasing order.

Implementation

[edit]

Below is an implementation of Pigeonhole sort inpseudocode. This function sorts the array in-place and modifies the supplied array.

function pigeonhole(array arr)is     min ←min(arr)    max ←max(arr)     index ← 0    range ← max - min + 1array tmp ← new array of length rangefor i = 0to rangeSTEP 1        tmp[i] = 0for i = 0tolength(arr)STEP 1        tmp[arr[i] - min] = tmp[arr[i] - min] + 1for i = 0to rangeSTEP 1while tmp[i] > 0do            tmp[i] = tmp[i] - 1            arr[index] = i + min            index = index + 1

Example

[edit]

Suppose one 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")

The pigeonhole array is then iterated over in order, and the elements are moved 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

For arrays whereN is much larger thann,bucket sort is a generalization that is more efficient in space and time.

See also

[edit]

References

[edit]
  1. ^"NIST's Dictionary of Algorithms and Data Structures: pigeonhole sort".
  2. ^Black, Paul E."Dictionary of Algorithms and Data Structures".NIST. Retrieved6 November 2015.
The WikibookAlgorithm implementation has a page on the topic of:Pigeonhole sort
Theory
Exchange sorts
Selection sorts
Insertion sorts
Merge sorts
Distribution sorts
Concurrent sorts
Hybrid sorts
Other
Impractical sorts
Retrieved from "https://en.wikipedia.org/w/index.php?title=Pigeonhole_sort&oldid=1316746318"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2026 Movatter.jp