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数值求解微分方程方法(欧拉法,隐式欧拉)攻略 背景介绍 微分方程是一个描述自然界及工程中许多现象的重要工具。虽然有些微分方程可以找到解析解,但有些方程并不容易求解。在这些情况下,数值方法是必需的。 数值求解微分方程方法 欧拉法 (Euler’s Method) 和 隐式欧拉法 (Implicit Euler’s Method) 是求解微分方程的两…

    python 2023年6月6日
    00
  • Python脚本打包成可执行文件过程解析

    Python脚本打包成可执行文件过程解析 在Python开发中,我们经常需要将Python脚本打包成可执行文件,以便在没有Python环境的机器上运行。本文将介绍Python脚本打包成可执行文件的过程,并提供两个示例。 安装pyinstaller 在将Python脚本打包成可执行文件之前,我们需要安装pyinstaller。pyinstaller是一个Pyt…

    python 2023年5月15日
    00
  • Python3正则表达式之:(?(id/name)yes-pattern|no-pattern)条件性匹配

    Python3正则表达式之:(?(id/name)yes-pattern|no-pattern)条件性匹配 在Python正则表达式中,条件性匹配是一种非常有用的技巧,可以根据某些条件来选择不同的匹配模式。本攻略将详细讲解Python正则表达式中条件性匹配的语法和用法,以及如何在实际应用中使用条件性匹配。 条件性匹配语法 Python正则表达式中的条件性匹配…

    python 2023年5月14日
    00
  • 解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题

    当我们在PyCharm中运行调用CMD命令行的程序时,有时会遇到中文内容在命令行中显示乱码的问题,解决此问题需经过以下步骤: 步骤一:设置PyCharm的编码格式 在PyCharm中打开Settings/Preferences窗口。 在搜索栏中输入“File Encoding”,找到“File Encoding”选项。 设置“Global Encoding”…

    python 2023年5月20日
    00
  • Python Word文件自动化实战之简历筛选

    让我来为你讲解“Python Word文件自动化实战之简历筛选”的完整攻略。 一、前置条件与准备工作 在进行Word文件自动化实战之前,需要具备以下前置条件: 具有Python基础知识,包括Python基本语法、流程控制、函数、模块等基本知识; 熟悉Python操作Word的相关库,如python-docx、pywin32等; 掌握Word文件的基本操作,如…

    python 2023年6月5日
    00
  • Python集合set()使用的方法详解

    Python集合set()使用的方法详解 什么是集合set() python中的集合是一种无序的不重复元素的集合,它是通过大括号{}或set()函数创建的。 创建一个集合 可以通过下述两种方式来创建一个集合: 使用大括号{}: my_set = {1, 2, 3} print(my_set) 输出结果: {1, 2, 3} 使用set()函数: my_set…

    python 2023年5月13日
    00
  • 经验丰富程序员才知道的8种高级Python技巧

    《经验丰富程序员才知道的8种高级Python技巧》这篇文章介绍了8种高级的Python技巧。下面我们逐个进行讲解: 1. 拆解嵌套式的数据结构 在Python中,嵌套式的数据结构比较常见,如:嵌套式的列表和字典等。如果想要快速的获取一个嵌套式数据结构的某一个元素,而且又不想写很多的代码,那么可以使用 Python 中的协程来实现这个目的。 协程提供了一种更加…

    python 2023年5月31日
    00
  • Python通过正则库爬取淘宝商品信息代码实例

    以下是“Python通过正则库爬取淘宝商品信息代码实例”的完整攻略: 一、问题描述 在爬取淘宝商品信息时,我们需要使用正则表达式来匹配和提取特定的信息。本文将介绍如何使用Python和正则表达式来爬取淘宝商品信息。 二、解决方案 2.1 发送HTTP请求,获取网页内容 我们首先需要使用Python的requests库发送HTTP请求,获取淘宝商品搜索结果的网…

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