当前位置: 首页 > article >正文

【C语言蓝桥杯每日一题】——排序

【C语言蓝桥杯每日一题】—— 排序😎

  • 前言🙌
    • 排序🙌
  • 总结撒花💞

追梦之旅,你我同行

   
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
在这里插入图片描述

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【C语言蓝桥杯每日一题】——排序~这里利用了数组指针的方法知识, 都是精华内容,可不要错过哟!!!😍😍😍

排序🙌

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝最近学习了一些排序算法,其中冒泡排序让他印象深刻。在冒泡排序中,每次只能交换相邻的两个元素。小蓝发现,如果对一个字符串中的字符排序,只允许交换相邻的两个字符, 则在所有可能的排序方案中,冒泡排序的总交换次数是最少的。
蓝找到了很多字符串试图排序,他恰巧碰到一个字符串,需要 100 次交 换,可是他忘了吧这个字符串记下来,现在找不到了。请帮助小蓝找一个只包含小写英文字母且没有字母重复出现的字符串,对该串的字符排序,正好需要 100 次交换。如果可能找到多个,请告诉小蓝最短的那个。如果最短的仍然有多个,请告诉小蓝字典序最小的那个。

在这里插入图片描述

解题思路分析: 😍

  • 首先认真读题,然后分析.
  • 题目表明了这个排序是利用冒泡排序 的,因此我们需要寻找冒泡排序的比较次数规律。可以看到, 对有N个字母的字符串时 完全乱序时需要交换N*(N-1)/2次数如果需要100次的交换,即最少需要15个字母
  • 要求字典序最小 显然要取a-o这15个字典序最小的字母。
  • 逆向思考 字符串经过100次交换后 得到正序字符串 abcdefghijklmno。而完全乱序的字符串onmlkjihgfedcba变成正序字符串需要105次交换 。
  • 这里先举个栗子:例如 54321,最后变成12345,需要交换10次。如果把3放到前面,即35421 ,让他排成升序 12345需要交换8次。分析可以发现,比3大的数交换次数减少一次,3和比3小的数交换次数不变
  • 所以,将105次减少到100次,只需要将 j 先提前放到最前面就Ok了,因为比 j 大的有5个字母。这样就能将105次交换减少到100次交换,也就符合题目要求了
  • 注意: 这里数组需要开辟16个空间,因为还需要存放 \0。

解题源码分享: 😍

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 0;
    int t = 0;
    char str [16] = "onmlkjihgfedcba";
    for (i = 4; i >= 0; i--)
    {
        if (str[i] > str[i + 1])
        {
            t = str[i];
            str[i] = str[i + 1];
            str[i + 1] = t;
        }
    }
    printf("%s", str);
    return 0;
}

程序输出结果验证: 😊
在这里插入图片描述

总结撒花💞

   本篇文章旨在分享【C语言蓝桥杯每日一题】——排序。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘


http://www.kler.cn/a/2901.html

相关文章:

  • 无插件H5播放器EasyPlayer.js网页web无插件播放器vue和react详细介绍
  • 计算机新手练级攻略——如何搜索问题
  • SpringBoot单体服务无感更新启动,动态检测端口号并动态更新
  • 容器docker的ulimit
  • Flume学习
  • 自定义包和第三方包
  • 【Docker】CAdvisor+InfluxDB+Granfana容器监控
  • C/C++基础讲解(五十七)之图形篇(绘制蓝天图案)
  • vue3后台管理系统
  • C/C++之while(do-while)详细讲解
  • 为了之后找工作不被虐,每天刷3道《剑指offer》Day-1
  • 手写Promise源码的实现思路
  • vue 高德地图添加放大缩小地图、转盘工具
  • 【模拟】日期问题、回文日期思路详解及代码实现
  • 静态通讯录,适合初学者的手把手一条龙讲解
  • 【java基础】Stream流的各种操作
  • 系统集成路由器OSPF动态、综合路由配置
  • 基于SpringBoot的酒店管理系统
  • 机器学习笔记之前馈神经网络(三)M-P神经元模型与感知机的关系
  • ElementUI学习笔记
  • 面试问了解Linux内存管理吗?10张图给你安排的明明白白
  • Linux编辑器-vim
  • 快速上手vue elementUI好看的登录界面
  • 嵌入式学习笔记——SysTick(系统滴答)
  • Mybatis(三):特殊SQL的执行
  • ChatGPT来了你慌了吗?