排序算法--桶排序
2016-05-06 21:59
302 查看
排序之桶排序
原理
桶排序的原理很简单,说原理之前我们先来举个例子:
假设我们现在有一段文本,比如是这样的
hahatingyugetczhenshilihaiakuailaigeiwoshenghouziba,这时我们需要将其中出现的次数最多的字母输出。
我们先来想一想啊,按照这个意思,我们应该是先统计每个单词出现的次数,那怎么统计呢?
当然是先声明一个数组用来标记26个字母
a[25](这就是桶),然后对文本进行遍历,每遍历到一个字母就将其对应数组值加1(找到了对应的元素就将它扔到桶里),最后文本遍历结束的时候每个字母出现的字数也就统计出来了,接下来只要找到次数最多的就可以啦。
So~这就是桶排序的原理,声明一个数组作为桶,然后条件满足时将桶内的值加1用来标记,最后再按照要求处理。
下面我们来看看代码:
#include<stdio.h> #include<string.h> void bucketCount(char *byte, int *count) { int i; for (i = 0; i < strlen(byte); i++) { // 将字母转化为小写 if ((int)(byte[i] - 'a') < 0) { byte[i] = byte[i] + 32; } // 将对应桶的值加1 count[(int)(byte[i] - 'a')]++; } } int main() { char byte[100]; // 初始化数组作为桶 int count[26] = {0}; int i, max = 0; scanf("%s", byte); bucketCount(byte, count); // 找到最大的 for (i = 0; i < 26; i++) { if (count[max] < count[i]) { max = i; } } printf("%c", max + 'a'); return 0; }
当然上段代码存在问题,比如有次数相同多的字母只能输出一个不能全部输出。
相关文章推荐
- 第10周项目一-点-圆-圆柱类的设计(1)
- 将按钮添加到窗体
- 窗体的使用
- 糟糕 安装失败 错误代码0xa0430721 解决方案
- hihocoder #1300 : 展胜地的鲤鱼旗 dp
- Liberty nova-api load app过程跟踪
- iOS开发之原生二维码生成
- 木化html
- HDU 2163 Palindromes
- spark中的Broadcast variables和Accumulator
- Redis的replication
- Memcache-Java-Client-Release源码阅读(之六)
- PAT-B 1037. 在霍格沃茨找零钱
- java底层知识(6)--CPU、内存
- iOS之数据加密
- linux基本命令
- Centos6.5建立本地YUM源
- 【房价网房价信息爬虫】整站40万条房价数据并行抓取,可更换抓取城市
- cookie中出现的乱码问题
- 平日小问题 (2):[Error] 'setprecision' is not a member of 'std'