python计数排序和基数排序算法实例

时间:2023-11-01 01:23:26 

一、计数排序

计数排序(Counting sort)是一种稳定的排序算法

算法的步骤如下:
找出待排序的数组中最大和最小的元素
统计数组中每个值为i的元素出现的次数,存入数组C的第i项
对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)
反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1
当输入的元素是 n 个 0 到 k 之间的整数时,计数排序的时间复杂度为O(N+K),空间复杂度为O(N+K)。当K不是很大时,这是一个很有效的线性排序算法。

以下是测试代码:

#-*- coding:utf8 -*-
import random

def jishu(data, max):
    """
    基数排序:当输入的元素是 n 个 0 到 k 之间的整数时(k不能太大,即max不能太大)
    @param data: 需要排序的数组
    @param max: 最大的数
    """
    result = [None for i in xrange(len(data))]  # 最后的结果
    c = [0 for i in range(max+1)]
    # 用数组c统计每个值=d的元素个数
    for d in data:
        c[d] = c[d] + 1

    # c[i]表示data中值<=i 的元素个数
    for i in range(1, max+1):
        c[i] = c[i] + c[i-1]

    # 在将C中的元素倒着打印出来就是排序好的
    for j in xrange(len(data)-1, -1, -1):
        result[c[data[j]]-1] = data[j]
        c[data[j]] = c[data[j]] – 1

    return result

 

if __name__ == '__main__':

    #制造1000个0到100的数字

    print jishu([random.randint(0, 100) for i in range(1000)], 100)

二、基数排序

基数排序排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。

它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
基数排序的方式可以采用 * (Least significant digital)或MSD(Most significant digital), * 的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。

以下是一个测试用例:

#-*- coding:utf8 -*-
import random
def jichu(data, length):
    """
    基数排 lsd
    @param data: 需要排列的组合
    @param length: 最大的数据是几位
    """
    for l in xrange(length):
        s = [[] for i in xrange(10)] 
        for d in data:
            s[d/(10**l) % 10].append(d)
        data = [d for s_list in s for d in s_list]

    return data

 

if __name__ == '__main__':

    list = [random.randint(1, 99999999) for i in xrange(99)]  # 制造99个数据
    print jichu(list, 8)

标签:python,计数排序,基数排序,算法
0
投稿

猜你喜欢

  • python利用JMeter测试Tornado的多线程

    2022-10-15 12:03:26
  • python笔记(1) 关于我们应不应该继续学习python

    2023-06-05 17:25:00
  • 如何使用Python 打印各种三角形

    2023-10-27 00:12:48
  • Python写一个简单的api接口的实现

    2023-07-23 20:20:53
  • python实现矩阵和array数组之间的转换

    2022-03-19 16:31:21
  • Asp Oracle存储过程返回结果集的代码

    2011-04-10 11:16:00
  • 在Python编程过程中用单元测试法调试代码的介绍

    2023-12-10 02:16:46
  • python计算牛顿迭代多项式实例分析

    2022-10-27 05:32:37
  • 用OpenCV进行年龄和性别检测的实现示例

    2021-02-17 18:18:19
  • selenium+python实现自动登录脚本

    2021-09-30 01:36:19
  • MySQL数据库优化详解

    2024-01-23 12:51:55
  • ASP连接access和mssql数据库的全能代码

    2008-10-12 13:17:00
  • 解决Python3.8用pip安装turtle-0.0.2出现错误问题

    2021-04-07 03:51:20
  • PyCharm 配置远程python解释器和在本地修改服务器代码

    2023-01-05 05:36:06
  • 解决Python requests库编码 socks5代理的问题

    2023-01-29 13:27:28
  • golang逐行读取文件的操作

    2023-07-10 14:39:56
  • Python 面向对象静态方法、类方法、属性方法知识点小结

    2022-02-10 07:45:52
  • 使用Title提升可访问性二

    2009-11-16 12:53:00
  • Python requests模块cookie实例解析

    2023-11-18 15:44:56
  • Scrapy框架基本命令与settings.py设置

    2021-12-03 14:05:47
  • asp之家 网络编程 m.aspxhome.com