fbpx
维基百科

鸽巢排序

鸽巢排序(Pigeonhole sort),也被称作基数分类,是一种时间复杂度大O符號)且在不可避免遍历每一个元素并且排序的情况下效率最好的一种排序算法。但它只有在差值(或者可被映射在差值)很小的范围内的数值排序的情况下实用[1]

鸽巢排序
概况
類別排序算法
資料結構數組
复杂度
最坏时间复杂度
最优时间复杂度
空間複雜度
其他
当且仅当时算法取得最优时间复杂度
相关变量的定义
n数组长度
N最大值减最小值

当涉及到多个不相等的元素,且将这些元素放在同一个「鸽巢」的时候,算法的效率会有所降低。为了简便和保持鸽巢排序在适应不同的情况,比如两个在同一个存储桶中结束的元素必然相等。

我们一般很少使用鸽巢排序,因为它很少可以在灵活性、简便性、尤是速度上超过其他排序算法。事实上,桶排序较鸽巢排序更加的实用。

鸽巢排序的一个比较有名的变形是吻合排序法tally sort),它仅仅适用非常有限的题目,这个算法因在Programming Pearls一书中作为解决一个非常规有限集问题方法的例子而著名。

显然,快速排序可以当作只有两个(有些情况下是三个)"鸽巢"的鸽巢排序。

算法

对于N个不同元素的鸽巢排序算法(伪代码

 function pigeonhole_sort(array a[n]) array b[N] var i,j zero_var (b) (* Zero out array b *) for i in [0...length(a)-1] b[a[i]] := b[a[i]]+1 (* 把结果复制回数组a *) j := 0 for i in [0...length(b)-1] repeat b[i] times a[j] := i j := j+1 

程式實現

Python 3.10

def pigeonhole_sort(arr: list) -> list: pigeonhole_len: int = 0 pigeonhole: list = [0] for i in arr: if pigeonhole_len < i: pigeonhole += [0] * (i - pigeonhole_len) pigeonhole_len = i pigeonhole[i] += 1 results: list = [] for i, v in enumerate(pigeonhole): results += [i] * v return results if __name__ == "__main__": pigeonhole_sort([1, 2, 100, 3, 8, 3, 9, 0, 0, 1]) 

参考文献

  1. ^ NIST's Dictionary of Algorithms and Data Structures: pigeonhole sort. 2019-02-11 [2020-04-05]. (原始内容于2019-05-28). 

鸽巢排序, 此條目或其章節极大或完全地依赖于某个单一的来源, 2020年4月5日, 请协助補充多方面可靠来源以改善这篇条目, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, pigeonhole, sort, 也被称作基数分类, 是一种时间复杂度为o, displaystyle, 大o符號, 且在不可避免遍历每一个元素并且排序的情况下效率最好的一种排序算法, 但它只有在差值, 或者可被映射在差值, 很小的范围内的数值排序. 此條目或其章節极大或完全地依赖于某个单一的来源 2020年4月5日 请协助補充多方面可靠来源以改善这篇条目 致使用者 请搜索一下条目的标题 来源搜索 鸽巢排序 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 鸽巢排序 Pigeonhole sort 也被称作基数分类 是一种时间复杂度为O n displaystyle O n 大O符號 且在不可避免遍历每一个元素并且排序的情况下效率最好的一种排序算法 但它只有在差值 或者可被映射在差值 很小的范围内的数值排序的情况下实用 1 鸽巢排序概况類別排序算法資料結構數組复杂度最坏时间复杂度O N n displaystyle O N n 最优时间复杂度O n displaystyle O n 空間複雜度O N n displaystyle O N n 其他当且仅当N O n displaystyle N O n 时算法取得最优时间复杂度相关变量的定义n数组长度N最大值减最小值当涉及到多个不相等的元素 且将这些元素放在同一个 鸽巢 的时候 算法的效率会有所降低 为了简便和保持鸽巢排序在适应不同的情况 比如两个在同一个存储桶中结束的元素必然相等 我们一般很少使用鸽巢排序 因为它很少可以在灵活性 简便性 尤是速度上超过其他排序算法 事实上 桶排序较鸽巢排序更加的实用 鸽巢排序的一个比较有名的变形是吻合排序法 tally sort 它仅仅适用非常有限的题目 这个算法因在Programming Pearls一书中作为解决一个非常规有限集问题方法的例子而著名 显然 快速排序可以当作只有两个 有些情况下是三个 鸽巢 的鸽巢排序 目录 1 算法 2 程式實現 2 1 Python 3 10 3 参考文献算法 编辑对于N个不同元素的鸽巢排序算法 伪代码 function pigeonhole sort array a n array b N var i j zero var b Zero out array b for i in 0 length a 1 b a i b a i 1 把结果复制回数组a j 0 for i in 0 length b 1 repeat b i times a j i j j 1程式實現 编辑Python 3 10 编辑 def pigeonhole sort arr list gt list pigeonhole len int 0 pigeonhole list 0 for i in arr if pigeonhole len lt i pigeonhole 0 i pigeonhole len pigeonhole len i pigeonhole i 1 results list for i v in enumerate pigeonhole results i v return results if name main pigeonhole sort 1 2 100 3 8 3 9 0 0 1 参考文献 编辑 NIST s Dictionary of Algorithms and Data Structures pigeonhole sort 2019 02 11 2020 04 05 原始内容存档于2019 05 28 取自 https zh wikipedia org w index php title 鸽巢排序 amp oldid 75592605, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。