zoukankan      html  css  js  c++  java
  • 排序算法--桶排序

    排序之桶排序

    原理

    桶排序的原理很简单,说原理之前我们先来举个例子:
    假设我们现在有一段文本,比如是这样的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;
    }
    
    

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

  • 相关阅读:
    装饰者模式(包装模式)
    内网穿透
    SpringMVC框架工作流程图及工作原理
    Java 使用 Socket 判断某服务能否连通
    最简单的一个socket客户端,保持连接服务端
    java读取txt文件
    SQL汇总
    最简单的一个socket服务端
    初级软件工程师怎么走向BATJ?——献给迷茫中的测试人
    软件测试工程师——100问面试题,你敢来接招吗?
  • 原文地址:https://www.cnblogs.com/tingyugetc/p/5467240.html
Copyright © 2011-2022 走看看