iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >算法笔记(六):计数排序和基数排序
  • 742
分享到

算法笔记(六):计数排序和基数排序

基数算法笔记 2023-01-30 22:01:32 742人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

(一)说明         这里我是按自己的理解去实现的,时间复杂度和空间复杂度和算法导论上的可能不一样,感兴趣的话参考下就行,感觉最重要的还是算法思想。根据算法性能去实现算法以后再研究。 (二)计数排序     计数排序的基本思想是:对

(一)说明

        这里我是按自己的理解去实现的,时间复杂度和空间复杂度和算法导论上的可能不一样,感兴趣的话参考下就行,感觉最重要的还是算法思想。根据算法性能去实现算法以后再研究。

(二)计数排序

    计数排序的基本思想是:对每一个输人元素x,确定小于x 的元素个数。 利用这一信息,就 可以直接把x放到它在输出数组中的位置上了。 例如,如果有17个元素小于x,则x就应该在第18个输出位置上。 当有几个元素相同时,这一方案要略做修改。 因为不能把它们放在同一个输出位置上。

     从这段话我们可以得出,我们要处理的事情其实就2个:

     1、获取小于x的元素的个数k,然后将x放到k+1的位置上(当然,因为python列表的索引是从0开始的,所以代码就没必要+1了,直接放到索引k上就行了(就比如:有4个元素小于X,那么此时A[4] = X就行了,因为A[0] A[1]  A[2] A[3]))

     2、处理相同元素的情况。

实现代码:

 1 #计数排序
 2 def conutingSort(A):
 3     B = [0 for i in range(len(A))] #初始化输出序列
 4     #2个for循环获取小于X的元素的个数,5-9行
 5     for i in range(len(A)):
 6         k = 0
 7         for j in range(len(A)):
 8             if A[i] > A[j]:
 9                 k += 1
10         #这个IF else,处理同名元素的情况,B.count(A[i])返回A[i]元素出现的个数
11         if A[i] in B:
12             B[k + B.count(A[i])] = A[i]
13         else:
14             B[k] = A[i]
15     return B
16 
17 A = [5,2,4,7,1,3,2,6,-1,-6]
18 
19 print(conutingSort(A))

 

 

(三)基数排序

     感觉这种方式单独对正整数进行排序还好,如果考虑负数和小数的问题,问题有点复杂,甚至于可能要借用其他排序算法去处理。看算法导论上面的意思好像也是针对正整数的排序算法,感觉写这本书的大牛文笔好像不太好,没有深入浅出的感觉,或者是翻译的文笔不行。

      基数排序,我个人的理解是,例如:对列表A = [720,328,278,356,789,234,123]进行排序

      1、先按个位数进行排序 ,得到结果[720,123,234,356,328,278,789]

      2、在第一步的基础上,按十位数进行排序,得到结果[720,123,234,328,356,278,789]

      3、在第二步的基础上,按百位数进行排序,得到结果[123,234,278,328,356,720,789]

     这样,有多少位数,就执行多少轮。最重要的是:每一轮结束时,一定要更新列表,然后下一轮排序是在这个的基础上进行的

   实现代码:

   **就是幂,例如x**y  就是 x的y次幂

   % 返回除法的余数

    [a for b in s for a in b] 这个是2重的列表生成式,不了解列表生成式的可以单独去了解下

 1 #基数排序
 2 def radixSort(A, d): # 最大位数是几,d就填几
 3     for i in range(d):  # d轮排序
 4         s = [[] for k in range(10)]
 5         for j in A:
 6             s[int(j / (10 ** i)) % 10].append(j)
 7         A = [a for b in s for a in b] #更新列表A
 8         print(A)
 9     return A
10 
11 A = [720,328,278,356,789,234,123,113,113,999,789,9999,8999]
12 
13 print(radixSort(A,4))

可以看到,前面4个就是每一轮排序后的结果

--结束END--

本文标题: 算法笔记(六):计数排序和基数排序

本文链接: https://www.lsjlt.com/news/179427.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 算法笔记(六):计数排序和基数排序
    (一)说明         这里我是按自己的理解去实现的,时间复杂度和空间复杂度和算法导论上的可能不一样,感兴趣的话参考下就行,感觉最重要的还是算法思想。根据算法性能去实现算法以后再研究。 (二)计数排序     计数排序的基本思想是:对...
    99+
    2023-01-30
    基数 算法 笔记
  • Java十大排序算法之计数排序刨析
    计数排序是非比较的排序算法,用辅助数组对数组中出现的数字计数,元素转下标,下标转元素 计数排序优缺点 优点:快 缺点:数据范围很大,比较稀疏,会导致辅助空间很大,造成空间的浪费 使用...
    99+
    2024-04-02
  • JAVA十大排序算法之基数排序详解
    目录基数排序代码实现时间复杂度算法稳定性基数排序 vs 桶排序 vs 计数排序总结基数排序 常见的数据元素一般是由若干位组成的,比如字符串由若干字符组成,整数由若干位0~9数字组成。...
    99+
    2024-04-02
  • Java排序算法之计数排序如何实现
    这篇文章主要为大家展示了“Java排序算法之计数排序如何实现”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java排序算法之计数排序如何实现”这篇文章吧。计数排序是非比较的排序算法,用辅助数组对...
    99+
    2023-06-21
  • JAVA十大排序算法之计数排序详解
    目录计数排序问题代码实现时间复杂度算法稳定性总结计数排序 一种非比较排序。计数排序对一定范围内的整数排序时候的速度非常快,一般快于其他排序算法。但计数排序局限性比较大,只限于对整数进...
    99+
    2024-04-02
  • 八大排序(三)堆排序,计数排序,归并排序
    一、堆排序 什么是堆排序:堆排序(Heap Sort)就是对直接选择排序的一种改进。此话怎讲呢?直接选择排序在待排序的n个数中进行n-1次比较选出最大或者最小的,但是在选出最大或者最小的数后,并没有对原来的序列进行改变,这使得下一次选数时还...
    99+
    2023-10-21
    算法 数据结构
  • Python3 基本排序算法之冒泡排序,
      基本排序算法按时间复杂度分类  O(n^2)  冒泡排序  插入排序  选择排序  Q(n log n)  分而治之  快速排序  归并排序  冒泡排序  相邻的两个元素对比,大的数后推,遍历整个列表一次后,将最大项以冒泡的方式排列i到...
    99+
    2023-01-31
    算法
  • 六大排序算法(Java版):从插入排序到快速排序(含图解)
    目录 插入排序 (Insertion Sort) 直接插入排序的特性总结: 选择排序 (Selection Sort) 直接选择排序的特性总结 冒泡排序 (Bubble Sort)  冒泡排序的特性总结 堆排序(Heap Sort) 堆排序...
    99+
    2023-09-15
    排序算法 算法 数据结构 java 后端
  • JavaScript数组排序和数字排序的方法
    这篇文章主要介绍“JavaScript数组排序和数字排序的方法”,在日常操作中,相信很多人在JavaScript数组排序和数字排序的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • PHP用“自然排序”算法对数组排序
    ...
    99+
    2024-04-02
  • 快速学习六大排序算法
    目录1. 插入排序2.希尔排序3.选择排序4.冒泡排序5.堆排序6.快速排序6.1 hoare版本(左右指针法)6.2 挖坑法6.3 前后指针法1. 插入排序 步骤: 1.从第一个元...
    99+
    2024-04-02
  • C++STL函数和排序算法的快排以及归并排序详解
    目录一、队列是什么?二、排序算法1.快速排序2、归并排序总结一、队列是什么? 头文件queue主要包括循环队列queue和优先队列priority_queue两个容器。 像栈一样,队...
    99+
    2024-04-02
  • 计数排序与桶排序python实现
    计数排序 计数排序原理: 找到给定序列的最小值与最大值 创建一个长度为最大值-最小值+1的数组,初始化都为0 然后遍历原序列,并为数组中索引为当前值-最小值的值+1 此时数组中已经记录好每个值的数量,自然也就是有序的了 ...
    99+
    2023-01-31
    python
  • Java桶排序之基数排序详解
    基数排序也是桶排序的一种,也是跟样本数据强相关的,且基数排序要求样本数据是非负的十进制数,如果有小数或者负数,那么代码将要大量重写!这就是不基于比较的排序的弊端。一般来说,我们认为基...
    99+
    2024-04-02
  • 数据结构:直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序(C实现)
    个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》 文章目录 前言一、插入排序1.直接插入排序2.希尔排序 二、选择排序1. 选择排序2.堆排序 三、交换排序1.冒...
    99+
    2023-09-14
    数据结构 c语言 排序算法
  • PHP如何用“自然排序”算法对数组排序
    这篇文章将为大家详细讲解有关PHP如何用“自然排序”算法对数组排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。自然排序算法 自然排序算法是一种对字符串数组进行排序的算法,其结果与人类按自然顺序阅读字符串...
    99+
    2024-04-02
  • Java桶排序的基数排序怎么理解
    这篇文章主要介绍“Java桶排序的基数排序怎么理解”,在日常操作中,相信很多人在Java桶排序的基数排序怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java桶排序的基数排序怎么理解”的疑惑有所帮助!...
    99+
    2023-06-21
  • java 数据结构基本算法希尔排序
    C语言数据结构基本算法希尔排序前言:基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序, 然后再用一个较小的增量(d/2)对它进行分组,在每组中再进...
    99+
    2023-05-31
    数据结构 希尔排序 ava
  • 数据结构与算法的基数排序是什么
    本篇内容主要讲解“数据结构与算法的基数排序是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据结构与算法的基数排序是什么”吧! 基数排序鸿蒙官方战略合作共建——HarmonyOS技...
    99+
    2023-06-15
  • 图解Java排序算法之快速排序的三数取中法
    目录基本步骤三数取中根据枢纽值进行分割代码实现总结基本步骤 三数取中 在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。在此我们采用三数取中法,也就是...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作