一、简介 1954年提出,是一个不需要比较的,类似于桶排序的线性时间排序算法。该算法是对于已知数量范围的数组进行排序。时间复杂度为O (n),适用于小范围集合的排 序。计数排序是用来排序0到100之间的数 字的最好的算法。 二、基本思想 对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素 ...
分类:
编程语言 时间:
2018-02-04 15:37:52
阅读次数:
363
基本算法如下: 1.插入排序 直接插入排序 折半插入排序 shell排序 2.交换排序 冒泡排序 快速排序 3.选择排序 简单选择排序 树形选择排序 堆排序 4.归并排序 二路归并排序 多路归并排序 5.基数排序 基数排序 ...
分类:
编程语言 时间:
2018-02-03 18:54:35
阅读次数:
171
1.冒泡排序 2.选择排序 3.插入排序 4.快速排序 5.堆排序 6.并归排序 7.希尔排序 8.内置堆模块排序 9.计数排序 ...
分类:
编程语言 时间:
2018-02-02 22:03:23
阅读次数:
207
查找无序数组的中位数,要想时间复杂度为O(n)其实用计数排序就能很方便地实现,在此讨论使用快速排序进行定位的方法。 1、中位数定义 2、算法思想 3、Java代码实现 4、时间复杂度分析 5、附录 中位数一般两种定义: 第一种: 排序后数组的中间位置的值,如果数组的个数是偶数个,则返回排序后数组的第 ...
分类:
编程语言 时间:
2018-01-26 20:59:15
阅读次数:
241
SA 后缀数组 首先一定要确定$SA$是个什么东西 $SA[i]$表示的是排名为$i$的后缀是哪一个 至于后缀$i$的排名是多少,那个是$rank[i]$ 当然啦 最最最难懂的就是基数排序 要是不用基数排序,每次对于一个二元组直接$sort$一下 这样的复杂度是$O(nlog^2)$ 对于二元组的基 ...
分类:
编程语言 时间:
2018-01-23 14:27:41
阅读次数:
155
一下是蒟蒻的个人想法,并不很严谨,仅供参考,如有缺误,敬请提出 参考资料: "陈立杰原版课件" "litble" "某大神" "某大神" 其实课件讲得最详实了 有限状态自动机 我们要学后缀自动机,我们先来了解一下自动机到底是什么。【虽说以前也学过AC自动机,只是当一个名字罢了】 有限自动机的功能是识 ...
分类:
其他好文 时间:
2018-01-18 20:45:17
阅读次数:
115
一、计数排序 概要: 时间复杂度O(n),空间复杂度O(k),k是输入序列的值的范围(最大值-最小值),是稳定的。计数排序一般用于已知输入值的范围相对较小,比如给公司员工的身高体重信息排序。 思路: 输入数组A为{3,5,1,2,4,3},值的范围是1~5,所以创建5个桶,序号1,2,3,4,5。装 ...
分类:
编程语言 时间:
2018-01-17 13:42:45
阅读次数:
171
思路参考《算法导论》P110 另外,这位老哥讲的很不错:http://www.cnblogs.com/kkun/archive/2011/11/23/2260275.html 代码 运行结果如下: ...
分类:
编程语言 时间:
2018-01-14 16:50:23
阅读次数:
193
任何比较排序(归并排序,插入排序等等)的时间复杂度在最坏的情况下都需要做Ω(n * lgn)次比较,而这里的的计数排序由于它不是基于比较排序的思路,所以它的复杂度不收这个限制,它的时间复杂度为Θ(n),为线性时间。同时,计数排序一个重要的性质就是它是稳定的,也就是说,对于两个相同的数来说,在输入数组 ...
分类:
编程语言 时间:
2018-01-14 15:16:05
阅读次数:
216
Java排序算法 1)分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(箱排序、基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆 ...
分类:
编程语言 时间:
2018-01-08 10:59:28
阅读次数:
205