MIT算法导论5——线性时间排序
常见的排序算法,像归并排序,堆排序时间复杂度为O(nlgn);像冒泡排序,插入排序则为O(n^2)。对于排序算法而言,只要你是通过比较,O(nlgn)是一条难以逾越的界限。为了追求更快的速度,智慧的人类发明了一种新的方法——计算排序(Counting sorts),在这种算法中没有比较运算,下面简单的介绍一下。
对于这个算法,有个比较重要的约束条件——排列的数据必须在特定的范围,我们假设区间范围为[1, k]。
用到3个数组,A[ ]表示需整理的原数组,B[ ]表示输出的数组结果,C[i ](1<= i <= k)表示在A中每个元素出现的频率,比如C[1]=2表示数组中元素1出现2次。
伪代码如下:
for i= 1 to k
do C[i] = 0; //将数组C 各个值初始化为0
for j = 1 to n
do C[a[j]] = C[a[j]] + 1; // 计算每个元素出现的频率
for i = 2 to k
do C[I] = C[I] + C[I-1]; // 此时的C[i] 表示元素小于等于i的频率,前缀加法
for j = n to 1
do B[C[A[j]] = A[j]
C[A[j]] = C[A[j]] - 1; //最后为分配,较难理解,结合实例自己画画有助于理解
该方法时间复杂度为O(k+n),所以使用时结合k与n的大小,由于排序算法最优为O(nlgn),So
if k <nlgn use Counting sorts
else use Merge sort,由此可见该方法一般处理数据规模较小的序列。
方法二 基数排序算法:可以处理大规模数据,以方法一为基础
主要思想为由低位到高位,按位排序,比如数据{ 237,393, 456},经过
个位排序{ 393, 456, 237 } ——》十位排序{ 237, 456, 393 } ——》 百位排序{ 237, 393, 456}从而得到最终结果。
MIT算法导论5——线性时间排序相关推荐
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数.此处k为某个整数(输入数据在一个小范围内). 算法思想 计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数.然后再将 ...
- 时间排序python_算法导论 第八章 线性时间排序(python)
比较排序:各元素的次序依赖于它们之间的比较{插入排序O(n**2) 归并排序O(nlgn) 堆排序O(nlgn)快速排序O(n**2)平均O(nlgn)} 本章主要介绍几个线性时间排序:(运算排序非比 ...
- 算法导论-线性时间排序习题解
8.1-3 证明:对于长度为n的n!中输入中至少一半而言,不存在线性时间的比较排序算法.对于n!中的1/n部分而言又怎样呢?1/2n部分呢? 解:即在决策树模型中求1/2, 1/n, 1/2n 部分的 ...
- 最大子数组问题 线性时间_我最喜欢的线性时间排序算法
最大子数组问题 线性时间 by Franziska Hinkelmann 通过Franziska Hinkelmann 我最喜欢的线性时间排序算法 (My Favorite Linear-time S ...
- MIT 算法导论 (二)Math Notation
MIT 算法导论 (二)Math Notation O: f(n) = O(g(n)) , means that there are some suitable constants,such tha ...
- MIT算法导论03-分治法
MIT算法导论03-分治法(Divide and Conquer) 课程名:Introduction to Algorithms 课程编号:6.046J/18.410J 授课教师:Prof.Erik ...
- 算法导论-排序(四)计数排序(线性时间排序)
目录 1.计数排序介绍 2.流程图 3.代码实现 4.性能分析 5.参考资料 内容 1.计数排序介绍 什么是计数排序? 计数排序是一种特殊的排序算法,之前介绍的排序算法需要对数进行两两比较,效率下界为 ...
- 算法导论-9.3-3-快速排序-最坏时间O(nlgn)
一.题目 假定元素的值不同,说明如何才能使快速排序在最坏情况下以O(nlgn)时间运行 二.思考 要改善最坏情况的下运行时间,就要从划分入手,保证即使是最坏情况,也要尽量均衡地划分. 因此,使用SEL ...
- MIT算法导论公开课第七讲哈希表
哈希表又称散列表,其定义是根据一个哈希函数将集合S中的关键字映射到一个表中,这个表就称为哈希表,而这种方法就称为Hashing.从作用上来讲,构建哈希表的目的是把搜索的时间复杂度降低到O(1),考虑到 ...
最新文章
- ADODB.Connection 错误 '800a0e7a' 未找到提供程序。该程序可能未正确安装。解决办法...
- Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
- oracle查看用户密码时间限制
- cutycapt(php截图工具)
- 全球唯一标识GUID
- java视窗_java-预览窗口(如Windows 7任务栏显示已打开的...
- jeecg 与 jeecg-p3有什么区别?
- HDU——2768 Cat vs. Dog
- 思考:日期类型的数据应该用什么样的具体形式存储到数据库?
- python serial_python_serial
- 数据结构中的头结点和头指针
- matlab画图不显示中文_[过时] [LaTeX 使用] 升级 macOS 10.15 后 ctex 文档不显示中文的临时方案...
- 数字图像处理-美图秀秀:大眼算法
- apkg格式怎么打开_干货:pdf转换器简单、好用,还能在线互转文件格式
- 计算机中MAX函数是求什么,MAX函数
- UTC时区表(.Net)
- html网页如何在手机上观看,电脑的html怎么在手机观看
- 【解决办法】CodeBlocks不能debug/不能启动debugger
- Ansible:遇到错误 sudo: /etc/sudoers is world writable\r\nsudo: no valid sudoers sources found, quitting
- 欢迎加入我们的前端技术交流群
热门文章
- 【如何求素数】试除法讲解
- android仿秒拍首页点击视频无缝播放器,Android 仿美拍,秒拍 ,视频封面选择.有图有真相....
- linux kernel --- dts的相关操作函数
- 论文阅读:(arXiv 2022)Loonie:Compressing COINs with Lo-constraints
- Grumble.js气泡形状的提示(Tooltip)控件
- Windows10关闭端口
- archlinux之manjaro之使用体验
- 0欧电阻在PCB板的作用
- win10系统在电源选项中限制cpu最大频率(更新后丢失“处理器电源管理“项)
- 关于“公司基因论”的争论,吴军观点没有错