算法精粹
文章平均质量分 85
本专栏讲解了常用和经典的算法实现。
1024工场
新技术,新未来,1024工场...
展开
-
算法:选择排序
一、概念 选择排序(它在不断的选择剩余元素之中的最小者):首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小元素,将它与数组的第二个元素交换。如此往复,直道将整个数组排序; 二、特点 运行时间与输入无关:找出最小的元素而扫描一遍数组并原创 2013-12-30 08:57:38 · 1856 阅读 · 2 评论 -
算法:插入排序
一、思想 插入排序:首先,从1个元素子数组元素开始,将第2个元素依次与子数组的元素比较大小,找个合适的位置(并将相应的子数组元素后移)并插入;再次,将第3个元素依次与子数组(2个元素)的元素比较大小,并插入到响应的位置;如此往复,直道将整个数组排序; 二、与选择排序比较 相同:当前索引左边的元素都是有序的,但是插入最终位置还不确定,原创 2013-12-31 09:05:29 · 1512 阅读 · 0 评论 -
算法:希尔排序
一、思想 希尔排序:使数组中任意间隔为h的元素都是有序的。在进行排序的时候,如果h很大,我们就能将元素移动到很远的地方,为实现更小的h有序创造方便。用这种方式,对任意以1结尾的h序列,我们都能够将数据排序; 二、概念 h有序数组:任意间隔为h的元素都是有序的数组; 三、高效原因原创 2014-01-01 10:45:40 · 1712 阅读 · 0 评论 -
算法:归并排序
一、思想 归并排序:将一个数组排序,可以先(递归地)将它分成两半部份分别排序,然后将结果归并起来; 二、概念 归并:将两个有序的数组归并成一个更大的有序数组; 三、特点 优点:能够保证将任意长度为N的数组排序所需要的时间和NlogN成正比; 缺点:需要额外的空间和N成原创 2014-01-02 08:57:28 · 1913 阅读 · 0 评论 -
算法:键索引计数法
一、思想 适用于小整数键的简单排序方法;假设数组a[]中的每个元素都保存了一个名字和一个组号,其中组号在0到R-1之间,以组号为键进行分组排序; 二、步骤 频率统计:使用int数组计算每个键出现的频率; 将频率转换成索引:使用count[]来计算每个键在排序结果中的起始位置; 数据分类:将count[]数组转原创 2014-01-12 09:36:34 · 3514 阅读 · 0 评论 -
算法:低位优先(LSD)
一、思想 此类字符串排序可以通过键索引计数法来完成;如果字符串长度均为W,那就从右向左以每个位置的字符作为键,用键索引方法将字符串排序W遍; 二、代码 /** * 低位优先的字符串排序 * * @author pengcx * */ public class LSD { /** * 将字原创 2014-01-10 09:02:04 · 2894 阅读 · 0 评论 -
算法:快速排序
一、思想 快速排序是一种分治排序算法,将一个数组分成两个子数组,将两部分独立排序,当两个子数组都有序时整个数组就自然有顺序了。 该方法的关键在与切分,这个过程使得数组满足下面三个条件: 对于某个j,a[j]已经排定; a[lo]到a[j-1]中的所有元素都不大于a[j]; a[j+1]到a[hi]中的所有元素都不小于a[j];原创 2014-01-07 09:07:46 · 2014 阅读 · 0 评论 -
算法:暴力字符串查找
一、字符串查找 给定一段长度为N的文本和一个长度为M的模式(pattern)字符串,在文本中找到一个和该模式相符的子字符串; 二、暴力字符串查找 在文本中模式可能出现匹配的任何地方检察匹配是否存在; 三、代码 /** * 暴力字符串查找 * * @author peng原创 2014-01-08 09:46:44 · 7714 阅读 · 0 评论