还是算法:高级排序算法:计数,基数和桶排序
来源:互联网 发布:dlp数据防泄漏 编辑:程序博客网 时间:2024/04/29 05:39
今天刚刚写完数据结构学习内部排序篇的学习日志,上网浏览一下网页又发现了几种自己完全没听过的排序算法。好吧好吧,我承认自己的确是菜鸟。 = =
计数排序
想写个计数排序,结果弄了一整天字符数组,呵呵,基础差没办法。
先介绍一下什么是计数排序吧:这是一个限制很大的算法,虽然效率可以达到O(n),但是应用范围不广。它的基本思想就是不通过比较来排序,而是通过直接统计元素在序列中应排位置的方法。他的算法是这样的:
首先,假设需要排序的元素的范围在0-k之内(多么大的一个限制啊)。然后创建一个计数数组,大小就是[0..k],数组中的每一位分别对应待排序序列的相应的数字,比如说待排序列中有一个32,那么count[32]对应的就是32在待排序列中出现的总次数(32有可能出现多次)。通过遍历一次待排序列,统计得到一个count数组,然后对这个数组作累加统计操作(有点类似于高数时候的积分),即for i=0 to k { count[i]=count[i-1]}, 这样就得到一个递增序列。而这个序列就是元素在排序后排序中所应该存放的位置。最后只需要根据这个递增序列,将待排序列中的元素输出到结果序列中就完成了。其中这种方法还是挺简单的,看看源代码好了:
- #include <stdio.h>
- #include <stdlib.h>
- const int LIST_LENGTH = 30;
- const int CHAR_LENGTH = 128;
- char *testcase[LIST_LENGTH] = {"jo","vicent","tom","honey","gigi","lily","susan","peter","bob","ron",
- "jason","henry","kiki","ken","auscar","vivian","yiyi","peace","iron","lotus",
- "andy","arta","ophone","denial","pipe","wade","james","kobe","kent","angel"};
- //Function Definition
- char** countSort(char **source);
- //Function Implementation
- char** countSort(char **source){
- //initialize the result pointer
- char **result = (char**)malloc(LIST_LENGTH*sizeof(char*));
- int count[CHAR_LENGTH]={0};
- int i;
- //generate the count array
- for (i=0;i<LIST_LENGTH;i++) count[**(source+i)]++;
- for (i=1;i<CHAR_LENGTH;i++) count[i] += count[i-1];
- int pos;
- for (i=0;i<LIST_LENGTH;i++) {
- pos = count[**(source+i)] -1 ;
- count[**(source+i)]--;
- *(result+pos) = *(source+i);
- }
- return result;
- }
- //test Function
- void testCountSort(){
- char** result;
- result = countSort(testcase);
- int i;
- for (i=0;i<LIST_LENGTH;i++) {
- printf(*(result+i));
- printf("/n");
- }
- }
- //Main Function
- void main(){
- testCountSort();
- }
to be con..
- 还是算法:高级排序算法:计数,基数和桶排序
- 【每日算法】计数&基数&桶&位图排序-简介
- 排序算法-桶排序和计数排序
- 漫谈经典排序算法:五、线性时间排序(计数、基数、桶排序)
- 漫谈经典排序算法:五、线性时间排序(计数、基数、桶排序)
- 【算法导论】排序 (四):决策树、线性时间排序(计数、基数、桶排序)
- 漫谈经典排序算法:五、线性时间排序(计数、基数、桶排序)
- 漫谈经典排序算法:五、线性时间排序(计数、基数、桶排序)
- 基数(cardinality)排序算法
- 排序算法汇总--冒泡,插入,归并,快速,堆,计数,基数,桶排序
- 三种线性排序算法(计数、基数、桶排序)的简单实现
- 排序算法-高级篇(计数排序)
- 三种线性时间O(n)排序算法 - 计数-基数-桶 - C++实现
- 十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
- 十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
- 十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
- 十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
- C++_排序算法--冒泡、插入、归并、快速、堆、基数、桶、计数
- 数控恒流源
- linux忘记密码的解决方法
- 【WEISS算法书】中缀转后缀
- 记一下这道算法题,是腾讯实习面试的题目(欢迎高手指点
- grub的修复和配置
- 还是算法:高级排序算法:计数,基数和桶排序
- wince作业
- 写在岔路口
- C语言中关于指针,二维数组等的问题,一个有趣的发现
- 大话RSA
- 解读:初识云操作系统 &深入研究云计算模式
- 转载:韩卫平--程序员们,你愿意维护别人写的“烂”代码么
- 推荐一些学习ARM的好书籍
- 学习Unix,可从事什么样的工作(3)《精通Unix下C语言与项目实