python算法学习之计数排序实例

Python算法学习之计数排序实例

计数排序是一种非比较排序算法,它的时间复杂度为O(n+k),其中n是待排序元素的个数,k是元素的取值范围。计数排序的基本思想是对于给定的输入序列中的每元素x,确定该序列中值小于x的元素的个数,然后将x直接存放到相应的输出序列的位置。计数排序的核心在于将输入的数据值转化为键存储在额外开的数组空间中。作为一种线性时间杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

计数排序的实现

下面是计数排序的Python实现代码:

def counting_sort(arr):
    # 获取数组的最大值和最小值
    max_val = max(arr)
    min_val = min(arr)

    # 计算桶的数量
    bucket_num = max_val - min_val + 1

    # 初始化桶
    bucket = [0] * bucket_num

    # 计算每个元素在桶中的个数
    for i in arr:
        bucket[i - min_val] += 1

    # 计算每个元素在输出序列中的位置
    for i in range(1, bucket_num):
        bucket[i] += bucket[i - 1]

    #序列
    output = [0] * len(arr)
    for i in arr:
        output[bucket[i - min_val] - 1] = i
        bucket[i - min_val] -= 1

    return output

在这个示例中,我们首先获取输入数组的最大值和最小值,然后计算桶的数量。接着,我们初始化桶,并计算每个元素在桶中的个数。然后,我们计算每个元素在输出序列中的位置,并输出序列。最后,我们返回输出序列。

计数的示例说明

示例1

假设我们需要对以下数组进行排序:

arr = [5, 3, 2, 8, 6, 4, 1, 3]

我们可以使用以下代码对这个数组进行计数排序:

sorted_arr = counting_sort(arr)
print(sorted_arr)

输出结果为:

[1, 2, 3,3, 4, 5, 6, 8]

在这个示例中,我们使用计数排序对一个随机数组进行排序。计数排序的时间复杂度为O(n+k),其中n是待排序元素的个数,k是元素的取值范围。由于这个数组的取值范围较小,因此计数排序的时间复杂度为O(n)。

示例2

假设我们需要对以下数组进行排序:

arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

我们可以使用以下代码对这个数组进行计数排序:

sorted_arr = counting_sort(arr)
print(sorted_arr)

输出结果为:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

在这个示例中,我们使用计数排序对一个逆序数组进行排序。计数排序的时间复杂度为O(n+k),其中n是待排序元素的个数,k是元素的取值范围。由于这个数组的取值范围较小,因此计数排序的时间复杂度为O(n)。

总结

计数排序是一种非常高效的排序算法,特别适用于取值范围较小的整数数组。它的时间复杂度为O(n+k),其中n是待排序元素的个数,k是元素的取值范围。计数排序的实现非常简单,只需要使用一个桶来存储每个元素在输入序列中出现的次数,然后再根据桶中元素的顺序输出排序结果即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python算法学习之计数排序实例 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python根据时间获取周数代码实例

    当我们需要根据某个具体的日期来获取周数时,Python中有两种常见的做法: 使用datetime模块计算周数。 该方法可以通过datetime模块的isocalendar()方法获取到当前日期所在年份、周数以及周几(默认以周一作为一周的第一天),再通过组合成一个元组,即可得到这个时间对象的周数。以下是一个简单的代码示例: import datetime d …

    python 2023年6月2日
    00
  • python如何把字符串类型list转换成list

    以下是“Python如何把字符串类型list转换成list”的完整攻略。 1. Python字符串类型list简介 在Python中,字符串类型list是一种常见的数据类型,它可以存储多个字符串元素。字符串类型list中的每个元素都是一个字符串,元素之间使用逗号分隔,整个list使用方括号括起来。 2. Python类型list转换成list 在Python…

    python 2023年5月13日
    00
  • 在python中实现强制关闭线程的示例

    在 Python 中实现强制关闭线程的方法主要是通过使用 threading.Event 或者 threading.Condition 来实现。我们可以创建一个事件对象或者条件对象,并在主线程中等待其被设置或者满足一定条件后再进行线程关闭的操作。 以下是两个示例来演示如何实现强制关闭线程: 示例1:使用 Event 实现强制关闭线程 import threa…

    python 2023年5月19日
    00
  • Python语言描述随机梯度下降法

    Python语言描述随机梯度下降法的完整攻略分为以下几个步骤: 1.理解随机梯度下降法的原理 在机器学习中,我们希望根据给定数据集训练出一个尽可能准确的模型,以实现对未知数据的预测。而随机梯度下降法就是一种常用的模型训练算法,它通过反复迭代更新模型参数来不断优化模型。其中,梯度指的是函数在给定点处的斜率,即函数的变化率,而随机指的是在每次迭代过程中只随机选择…

    python 2023年6月5日
    00
  • 利用Python脚本实现传递参数的三种方式分享

    下面是 “利用Python脚本实现传递参数的三种方式分享” 的完整攻略。 标题 利用Python脚本实现传递参数的三种方式分享 简介 在编写Python脚本时,我们经常需要将参数传递进来并进行处理。在本篇文章中,我们将分享如何利用Python脚本实现传递参数的三种方式。 方式一:命令行参数 命令行参数是在命令行中直接传入的参数。我们可以使用sys.argv来…

    python 2023年5月14日
    00
  • import的本质解析

    import的本质解析 在Python中,import是一个非常重要的关键字,用于导入模块和包。在本文中,我们将深入探讨import的本质,包括模块搜索路径、模块缓存、动态导入等。 模块搜索路径 在Python中,当我们使用import语句导入模块时,Python解释器会按照一定的顺序搜索模块。具体来说,Python解释器会按照以下顺序搜索模块: 当前目录 …

    python 2023年5月15日
    00
  • Python深度学习实战PyQt5安装与环境配置过程详解

    Python深度学习实战PyQt5安装与环境配置过程详解 简介 本篇文章旨在介绍Python深度学习实战PyQt5的安装过程和环境配置,使读者在学习这门技术时少走弯路。 安装Python 首先,我们需要安装Python。Python是一种高级编程语言。在安装Python之前,需要确定你的计算机是否已安装Python,如果没有,你需要在Python的官网(ht…

    python 2023年5月14日
    00
  • pycharm软件实现设置自动保存操作

    PyCharm是一款用于Python开发的IDE(Integrated Development Environment),提供丰富的功能和工具。它的自动保存功能可以帮助我们在忘记保存时避免丢失代码。以下是实现PyCharm自动保存的攻略: 步骤1:在PyCharm中打开设置面板 首先,在PyCharm的菜单栏中依次选择“File”->“Settings…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部