首页 > 其他分享 >鸽子洞排序

鸽子洞排序

时间:2024-02-01 14:01:01浏览次数:19  
标签:__ 鸽子 val min 鸽巢 排序 size

# Python程序实现鸽巢排序

# 鸽巢排序的算法

def pigeonhole_sort(a):
    """
    >>> a = [8, 3, 2, 7, 4, 6, 8]
    >>> b = sorted(a)  # 非破坏性排序
    >>> pigeonhole_sort(a)  # 破坏性排序
    >>> a == b
    True
    """
    # 列表中值的范围大小(即,我们需要的鸽巢数量)

    min_val = min(a)  # min() 查找最小值
    max_val = max(a)  # max() 查找最大值

    size = max_val - min_val + 1  # size 是最大值和最小值之差加一

    # 大小等于变量 size 的鸽巢列表
    holes = [0] * size

    # 填充鸽巢。
    for x in a:
        assert isinstance(x, int), "仅允许整数"
        holes[x - min_val] += 1

    # 将元素按顺序放回数组。
    i = 0
    for count in range(size):
        while holes[count] > 0:
            holes[count] -= 1
            a[i] = count + min_val
            i += 1


def main():
    a = [8, 3, 2, 7, 4, 6, 8]
    pigeonhole_sort(a)
    print("Sorted order is:", " ".join(map(str, a)))


if __name__ == "__main__":
    main()

 

标签:__,鸽子,val,min,鸽巢,排序,size
From: https://www.cnblogs.com/mlhelloworld/p/18001090

相关文章

  • 树排序
    """树排序算法。构建二叉搜索树,然后遍历它以获取排序后的列表。"""from__future__importannotationsfromcollections.abcimportIteratorfromdataclassesimportdataclass@dataclassclassNode:val:intleft:Node|None=Noneright:......
  • unity中,连续路径上的点排序
    1///<summary>2///路径点排序3///</summary>4///<paramname="start">路径起点</param>5///<paramname="input">路径上所有的点</param>6///<paramnam......
  • 最多能完成排序的块
    769.MaxChunksToMakeSorted(Medium)数组arr是[0,1,...,arr.length-1]的一种排列,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。我们最多能将数组分成多少块?示例1:输入:arr=[4,3,2,1,0]输......
  • 蒻苟的第一篇学习笔记(快速排序)
    快速排序是一个非常经典也非常常用的排序算法。在平均状况下,排序n个项目需要Ο(nlogn)次比较,在最坏状况下则需要Ο(n2)次比较,但这种状况其实并不常见。快速排序是分而治之思想在排序算法上的典型应用。算法步骤:1.从数列中挑出一个元素,称为"基准"。2。设置两个"哨兵",利用......
  • 深入浅出堆排序: 高效算法背后的原理与性能
    ......
  • 快速排序:高效分割与递归,排序领域的王者算法
    ......
  • 【学习笔记】排序
    选择排序选择排序是一种简单的排序算法。它的原理是每次找到数组中的最小值放到正确的位置。选择排序的最好、最坏、平均时间复杂度都是\(O(n^2)\),空间复杂度为\(O(1)\)。由于存在交换这一操作,选择排序是一个不稳定的排序算法。voidselectionSort(inta[],intn){ for(int......
  • 洛谷题单指南-排序-P1012 [NOIP1998 提高组] 拼数
    原题链接:https://www.luogu.com.cn/problem/P1012题意解读:通过某种合理的排序方式,使得排序后的数字连在一起最大。解题思路:此题关键在于排序,对于两个数字,哪个数字应该排在前面呢?1、思考误区很容易想到,给定两个数abcd、xyz,先比较第一位a和x,谁大谁排前面,一直到c和z。再来看d,这......
  • 洛谷题单指南-排序-P1104 生日
    原题链接:https://www.luogu.com.cn/problem/P1104题意解读:将学生按照年龄由大到小排序,如果年龄相同,后输入的排在前面,输出排序后的学生姓名。解题思路:此题是一个排序常规题,年龄大排在前说明年、月、日越小越在前面,核心的排序思路如下:1、如果年份不同,按年份由小到大排序2、如果......
  • 洛谷题单指南-排序-P5143 攀爬者
    原题链接:https://www.luogu.com.cn/problem/P5143题意解读:给出一系列的点,按某种顺序经过所有点,计算距离。解题思路:如果小学生,可能对于三维坐标距离有些陌生,没关系,题目已经给出了计算公式,直接套公式即可,关键步骤如下:1、读取所有坐标点2、按高度值从小到大排序3、从头依次计算......