计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。例如,如果输入序列中只有17个元素的值小于x的值,则x可以直接存放在输出序列的第18个位置上。当然,如果有多个元素具有相同的值时,我们不能将这些...
分类:
编程语言 时间:
2014-11-28 09:59:18
阅读次数:
165
字符串的处理真可谓是博大精深,后缀数组这种数据结构我花了两天时间才明白了其构造的过程。主要是代码不好理解。
数据结构:
1.sa数组,就是后缀数组,按照字典序排列,其意义为:sa[i]=k,排第i名的子串是从k位开始的。
2.rank名次数组,其意义为:rank[i]=k,以i为起点的子串排名为k。
很容易看出来两者可以相互转化。
求这两个数组的过程是基于基数排序,计数排序的方法。
下...
分类:
编程语言 时间:
2014-11-22 12:07:41
阅读次数:
199
#include #include #define MAX 1000 //函数原型 void counting_sort(int A[],int length_A,int B[],int k); //测试代码 void main() { int A[]={-3,2...
分类:
编程语言 时间:
2014-11-22 10:32:42
阅读次数:
200
举个来说明桶排序的过程,假设现在有A={0.78,0.17,0.39,0.26,0.72,0.94,0.21,0.12,0.23,0.68},桶排序如下所示:
研究过计数排序我们知道了————计数排序是假设输入是由一个小范围内的整数构成,而桶排序则假设输入由一个随机过程产生的,该过程将元素均匀而独立地分布在区间[0,1)上。当桶排序的输入符合均匀分布时,即可以线性期望时间运行。...
分类:
编程语言 时间:
2014-11-19 11:08:36
阅读次数:
312
计数排序假设n个输入元素中的每一个都介于0和k之间的整数,k为n个数中最大的元素。当k=O(n)时,计数排序的运行时间为θ(n)。计数排序的基本思想是:对n个输入元素中每一个元素x,统计出小于等于x的元素个数,根据x的个数可以确定x在输出数组中的最终位置。此过程需要引入两个辅助存放空间,存放结果的B[1...n],用于确定每个元素个数的数组C[0...k]。算法的具体步骤如下:
(1)根据输...
分类:
编程语言 时间:
2014-11-17 09:17:02
阅读次数:
225
当数据太大,内存要求紧,整数范围小时,存在不能用快排的情况,这时可用计数排序。
#include
#include
#include
inline int readint(){
char c=getchar();
while(!isdigit(c)) c=getchar();
int x=0;
while(isdigit(c)) {
x=x*10+c-'0...
分类:
编程语言 时间:
2014-11-08 15:19:58
阅读次数:
194
1 //计数排序的思想是这样的,如果小于等于a的数字有n个,那么就把a放在第n+1个位置,从而达到排序的目的 2 //关键是怎么统计小于等于a的数字有多少个, 3 /* 4 可以采用这样一个办法,将数组元素的值映射为下标,统计该下标出现了多少次,然后再统计比该下标小或者等的下标出现了多少次, 5 ....
分类:
编程语言 时间:
2014-11-06 19:15:58
阅读次数:
208
计数排序(Counting sort)是一种稳定的线性时间排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据.....
分类:
编程语言 时间:
2014-10-28 19:35:34
阅读次数:
218
今天发现...比较流行的后缀数组模板里的排序居然不是“基数排序”,而是“计数排序”....难怪我理解了那么久的代码还是理解不到...原来一开始的思想就没对...想了一下,原来后缀数组模板里的确实是“基数排序”,只不过对每一位排序的实现它用的是“计数排序”,而不是我一直所想的桶排。怎么没人说说这几个排...
分类:
编程语言 时间:
2014-10-25 20:03:07
阅读次数:
178