您的位置:首页 > 其它

排序算法--桶排序

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;
}

当然上段代码存在问题,比如有次数相同多的字母只能输出一个不能全部输出。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: