算法导论
sunnylinner
宅
展开
-
排序算法之——计数排序(Java实现)
今天,我来讲一讲计数排序。技术排序与堆排序快速排序等排序不同,它是一种非比较排序,已经有人证明过,比较排序的时间下界是Ω(nlogn),但这个性质是不适用于计数排序的,因为它不是比较排序。他的时间是线性的。 计数排序假设n个输入,每个都是介于0到k的整数。计数排序的基本思想是对每一个输入元素x,确定出小于x的元素个数。有了这一信息,直接x放到对应的位置上就行了。比如说有5个元素小于转载 2016-09-17 13:22:23 · 1052 阅读 · 0 评论 -
排序算法之——基数排序(Java实现)
今天,我来讲一讲基数排序。基数排序是一种用在老式穿卡机上的算法。一张卡片有80列,每一列可以在12个位置中的任一处穿孔。排序器可以被机械地“程序化”,以便对一叠卡片中的每一列进行检查,再根据穿孔的位置将它们放入12个盒子里。这样,操作员就可以逐个地将它们收集起来,其中第一个位置穿孔的放在最上面,第二个其次,等等。对于十进制数字来说,每列中只用到10个位置(另两个位置用于编码非数值字符)。一个d位数转载 2016-09-18 15:37:53 · 453 阅读 · 0 评论 -
排序算法之——快速排序(Java实现)
排序算法有很多,今天我来讲一讲其中实用性最强的一种算法——快速排序。 为什么说它实用性最强呢?因为快速排序的平均性能非常好,虽然它的最坏运行时间为O(n^2),但是平均运行时间是O(nlgn),而且里面隐含的常数因子很小。而且它是原地排序的,所谓原地排序,就是不需要开辟新的数组空间,就可以进行排序。 快速排序基于分治模式,所谓分治模式,就是把问题拆成一个个小问题转载 2016-09-18 19:47:49 · 629 阅读 · 0 评论 -
堆排序Heap Sort——浅显易懂+Java实现
最近在恶补一些计算机基础内容,看到了堆排序,想想以前常说堆栈堆栈,但我竟然连堆有哪些应用都记不得了,所以,重温了堆排序后,我来给大家分享一下,希望能对大家有所帮助。(代码实现不采用伪代码,使用java实现,毕竟来看博客的都不想和看书一样把) 首先,堆是一种数据结构,你可以把他看成一颗完全二叉树,如下图所示:圆圈上方的数字代表下标:他的特性就是:父结点的值要大于两个儿子结点的值。转载 2016-09-19 14:47:25 · 10226 阅读 · 4 评论 -
排序算法之——合并排序/归并排序(Java实现)
今天,来讲一讲合并排序,其实我已经写了 堆排序 和 快速排序,本来都不想写这个,但是,当我发现我身边很多人竟然都不知道这个排序的时候,我震惊了,毕竟,这是一个经典的入门算法(反正外国貌似是这样的,根据我看的书和视频),历史也十分悠久。下面就来讲讲这历史悠久的算法。 合并排序是一种典型的分治法算法。先把数组拆成两个数组,对两个数组进行继续拆分,直到能够对拆分后的两个结果分别进行排序转载 2016-09-18 20:37:44 · 751 阅读 · 1 评论 -
堆的应用——优先级队列
接上文:堆排序Heap Sort——浅显易懂+Java实现 堆分最小堆最大堆,优先级队列也分最小优先级队列和最大优先级队列。先来介绍一下优先级队列: 优先级队列是用来维护由一组元素构成的集合S的数据结构,这一组元素中的每一个都有一个关键字key,一个最大优先级队列支持以下操作: Insert(S, x):把元素x插入S中 Ma转载 2016-09-19 21:22:22 · 374 阅读 · 0 评论