• 蓝桥杯入门即劝退(四)[ 字符串排序 ]


    九层之台,起于垒土,你我皆是垒土人✔
    愿我的文章对你有所帮助!
    欢迎===关注===点赞===评论,共同学习,共同进步!

    一、题目 (填空题)

      小蓝最近学习了一些排序算法,其中冒泡排序让他印象深刻。

    冒泡排序中,每次只能交换相邻的两个元素。

    小蓝发现,如果对一个字符串中的字符排序,只允许交换相邻的两个字符, 则在所有可能的排序方案中,冒泡排序的总交换次数是最少的。

    例如,对于字符串 lan排序,只需要 1 次交换。对于字符串 qiao 排序,总共需要 4次交换。

    小蓝找到了很多字符串试图排序,他恰巧碰到一个字符串,需要 100 次交 换,可是他忘了吧这个字符串记下来,现在找不到了。

    请帮助小蓝找一个只包含小写英文字母且没有字母重复出现的字符串,对 该串的字符排序,正好需要 100次交换。如果可能找到多个,请告诉小蓝最短的那个。如果最短的仍然有多个,请告诉小蓝字典序最小的那个。

    二、解题思路

    解题思路1、在做本题时,我的思路是首先把字母排序可以暂时看成数字排序,dcba可以看成4321,这样理解起来简单。

    2、要求使用冒泡排序,简单,写个冒泡排序。

    3、在冒泡排序内部计入计数器,计算需要多少次交换,当测试到15..2..1时交换次数为105!

    4、也就是说再减少五次就刚好为100次!那么需要把数字有序移动5个位置!

    5、我在解此题时错误的把较大的数字往后移动变成14..15-10...1,虽然说刚好为100,但是错误,因为题目还要求字典序最小!

    6、那么说明应该把较小的数往前移动,且移动距离刚好是五位,15-5=10,OK,把10扔到最前面!

    7、得到10-15-14-13-...-2-1;

    8、把数字替换成小写字母,PASS!!

     代码实现:

    1. public static void main(String agrs[]){
    2. int Num[]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
    3. BubbleSort(Num);
    4. System.out.print("jonmlkihgfedcba")
    5. }
    6. public static void BubbleSort(int Num[])//冒泡排序,右手就行
    7. {
    8. int count=0;
    9. for(int i=0;i
    10. for (int k = 0; k < Num.length - 1; k++) {
    11. if (Num[k + 1] < Num[k]) {
    12. int temp = Num[k];
    13. Num[k] = Num[k + 1];
    14. Num[k + 1] = temp;
    15. count++;
    16. }
    17. }
    18. }

     学废了吗??

    发文不易,恳请大佬们高抬贵手!


    点赞:随手点赞是种美德,是大佬们对于本人创作的认可!


    评论:往来无白丁,是你我交流的的开始!


    收藏:愿君多采撷,是大佬们对在下的赞赏!

  • 相关阅读:
    Static 静态成员
    Revit插件的“精准管线”“洞口定位”功能介绍
    编写Dockerfile
    降低半导体金属线电阻的沉积和蚀刻技术
    《数理统计》第4章
    IIC/I2C总线实验
    2183440-36-8,APN-C3-PEG4-alkyne 性能稳定功能连接体
    springboot+vue+elementUI 篮球竞赛预约平台#毕业设计
    redo log、binlog的提问
    云计算面试题【后期】
  • 原文地址:https://blog.csdn.net/m0_55278347/article/details/127710955