文章目录

  • 九、桶排序
  • 十、基数排序

九、桶排序

1、桶排序介绍
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:

在额外空间充足的情况下,尽量增大桶的数量

使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中

同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。

2、桶排序最快与最慢

  • 最快的时候:当输入的数据可以均匀的分配到每一个桶中。
  • 最慢的时候:当输入的数据被分配到了同一个桶中。

3、Python练习


def bucket_sort(s):"""桶排序"""min_num = min(s)max_num = max(s)# 桶的大小bucket_range = (max_num-min_num) / len(s)# 桶数组count_list = [ [] for i in range(len(s) + 1)]# 向桶数组填数for i in s:count_list[int((i-min_num)//bucket_range)].append(i)s.clear()# 回填,这里桶内部排序直接调用了sortedfor i in count_list:for j in sorted(i):s.append(j)if __name__ == __main__ :a = [3.2,6,8,4,2,6,7,3]bucket_sort(a)print(a) # [2, 3, 3.2, 4, 6, 6, 7, 8]

十、基数排序

1、基数介绍
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

2、基数排序、计数排序和桶排序的差异
这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:

  • 基数排序:根据键值的每位数字来分配桶;

  • 计数排序:每个桶只存储单一键值;

  • 桶排序:每个桶存储一定范围的数值;

3、动图演示

4、Python练习

def RadixSort(list):i = 0                                    #初始为个位排序n = 1                                     #最小的位数置为1(包含0)max_num = max(list) #得到带排序数组中最大数while max_num > 10**n: #得到最大数是几位数n += 1while i < n:bucket = {} #用字典构建桶for x in range(10):bucket.setdefault(x, []) #将每个桶置空for x in list: #对每一位进行排序radix =int((x / (10**i)) % 10) #得到每位的基数bucket[radix].append(x) #将对应的数组元素加入到相 #应位基数的桶中j = 0for k in range(10):if len(bucket[k]) != 0: #若桶不为空for y in bucket[k]: #将该桶中每个元素list[j] = y #放回到数组中j += 1i += 1
return  list

文章转载于:
十大经典排序算法(Python)

十大经典排序算法6(Python版本)相关推荐

  1. 按复杂度有效性递减排序_十大经典排序算法:python源码实现,通俗深入讲解

    概述 提示:本文上万字,陆陆续续疏理知识点加测试代码,耗时近一个月.阅读时长40分钟左右. 本文将十大经典排序算法进行汇总,从源码实现.复杂度.稳定性进行分析,并对每种排序的特性进行点评.对典型算法, ...

  2. 9个元素换6次达到排序序列_全面讲解十大经典排序算法(Python实现)

    作者 | hustcc 链接 | https://github.com/hustcc/JS-Sorting-Algorith 排序算法是<数据结构与算法>中最基本的算法之一.排序算法可以分 ...

  3. 十大经典排序算法3(Python版本)

    文章目录 四.希尔排序 五.归并排序 四.希尔排序 1.希尔介绍 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本.但希尔排序是非稳定排序算法. 希尔排序是基于插入排序的以下两点性质而 ...

  4. 十大经典排序算法5(Python版本)

    文章目录 七.堆排序 八.计数排序 七.堆排序 1.堆排序介绍 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键 ...

  5. 十大经典排序算法4(Python版本)

    文章目录 六.快速排序 六.快速排序 1.快速介绍 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较.在最坏状况下则需要 Ο(n2) 次比较,但这 ...

  6. 十大经典排序算法2(Python版本)

    文章目录 二.选择排序 三.插入排序 二.选择排序 1.选择介绍 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度.所以用到它的时候,数据规模越小越好.唯一的好处可能就 ...

  7. 十大经典排序算法1(Python版本)

    文章目录 一.排序算法与时间复杂度 二.冒泡排序 一.排序算法与时间复杂度 1.十大排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次 ...

  8. 数据结构十大经典排序算法--Python

    十大经典排序算法 (java实现看这个)https://program.blog.csdn.net/article/details/83785159 名词解释: 1.冒泡排序 2.选择排序 3.插入排 ...

  9. python经典排序_python实现十大经典排序算法

    写在前面 本文参考十大经典排序算法(动图演示),这篇文章有动图显示,介绍的很详细.本文是部分内容有借鉴此博客,用python实现,有一些改进. 各种算法的时间.空间复杂度 1.冒泡排序 1.比较相邻的 ...

最新文章

  1. JAVA实现链表中倒数第K个节点问题(《剑指offer》)
  2. java求面积Shape类_Shape-2,形状类,正方形类,长方形类,圆类,求周长面积
  3. Windows启动过程
  4. SQLite数据库介绍
  5. 二、Git多人开发:不同人修改了不同文件如何处理
  6. 20万人仍然每天活跃在“死”掉的ofo APP上:这已变成一个返利应用
  7. Apollo进阶课程 ⑦ | 高精地图的采集与生产
  8. Elasticsearch 5.6.5 安装head插件
  9. python安卓自动化实现方法_uiautomator +python 实现安卓UI自动化
  10. 中国红色旅游消费大数据报告(2021)
  11. 又双叒叕是一个动态简历
  12. 指纹识别 python_Python实现指纹识别你见过没?
  13. 牛年大吉~ 包邮送一部新款华为手机!
  14. 华为路由器第三方插件_为什么路由器不开 SSH 就等于失去了很多乐趣?
  15. linux中 」 、」」 的用法
  16. 语言怎么搜包的源代码_大四学生发明文言文编程语言,设计思路清奇
  17. pb文件存储成txt, pbtxt文件
  18. cad批量打印快捷键_CAD布局批量打印必备工具之一
  19. 信度和效度经典例子_信度与效度有什么关系?
  20. 【newCoder】2016校招真题在线编程 风口的猪-中国牛市

热门文章

  1. java 类对象_Java中的对象和类是什么?
  2. 微信商品详细信息页面html,微信小程序商品展示页面(仿咸鱼)
  3. linux期末考试试题4,Linux试题4
  4. html中为什么style中不显示发光点,css实现发光文字,以及一点点js特效
  5. mysql delete node_Node.js MySQL DELETE
  6. ipa图片解密 php,ipa文件中的图片获取
  7. html 评分五角星的插件,jquery五角星评分插件示例分享
  8. JSP标准标签库、通用标签
  9. butterknife 不能绑定错误
  10. 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的汽车销售管理系统