解题思路:

        冒泡排序和选择排序在排序问题里是两种比较简单常用的方法。先讲下两种排序方法的实现过程,这两种排序方法是如何完成排序的。都以从小到大升序举例。

        

        冒泡排序是指,先取第一个数和第二个数比较大小,如果第一个数大于第二个数,就交换他们的位置,再取第二个数和第三个数比较,如果第二个数大于第三个数就再次交换位置,直到每两个相邻的都比较了一次,这样是一个循环,n个数一共要循环n-1次。

        

        选择排序是指,先取第一个数,和第二个开始的每个数都比较一次,找到最小的放到第一个,再取第二个数,和第三个开始每个比较一次,把最小的放到第二个。最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。

        

        三个字符串比较有其他更简单的方法,只是看到有个优质题解,说用冒泡排序结果代码是选择排序就特地出来讲一下,怕有人理解错了。

注意事项:
        字符串的比较用strcmp(str1,str2),str1>str2返回大于0的数,相等返回0,str1<str2返回小于0的数。

参考代码:

选择排序:

#include <stdio.h>
#include <string.h>

typedef struct _string
{
   char str[N];
}strs;

int main(void)
{
  strs input[3];
  for(int i=0;i<3;i++)
       scanf("%s",input[i].str);
   strs temp[1];
   for(int i=0;i<3;i++)                                         //外循环表示选择第i个数
   {
       strcpy(temp[0].str,input[i].str);
       for(int j=i+1;j<3;j++)                                 //内循环表示用第i个数和第j=i+1个数以及后面每个数比较
       {
            if(strcmp(temp[0].str,input[j].str)>0)    //因为是升序,所以如果第i个数比之后的数大,就交换位置,把最小的换到第一个,第二小的换到第二个
           {
           strcpy(temp[0].str,input[j].str);
           strcpy(input[j].str,input[i].str);
           strcpy(input[i].str,temp[0].str);
           }
       }
   }
   for(int i=0;i<3;i++)
       printf("%s\n",input[i].str);
   return 0;
}

冒泡排序:

#include <stdio.h>
#include <string.h>

#define N 100

typedef struct _string
{
   char str[N];
}strs;

int main(void)
{
  strs input[3];
  for(int i=0;i<3;i++)
       scanf("%s",input[i].str);
   strs temp[1];
   for(int i=0;i<2;i++)                                                //外循环为排序趟数,3个数进行3-1趟交换,n个数进行n-1趟交换
   {
       for(int j=0;j<2-i;j++)                                          //内循环为每趟比较的次数
       {
            if(strcmp(input[j].str,input[j+1].str)>0)         //相邻元素比较,若逆序则交换
           {
           strcpy(temp[0].str,input[j].str);
           strcpy(input[j].str,input[j+1].str);
           strcpy(input[j+1].str,temp[0].str);
           }
       }
   }
   for(int i=0;i<3;i++)
       printf("%s\n",input[i].str);
   return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论