解题思路:
冒泡排序和选择排序在排序问题里是两种比较简单常用的方法。先讲下两种排序方法的实现过程,这两种排序方法是如何完成排序的。都以从小到大升序举例。
冒泡排序是指,先取第一个数和第二个数比较大小,如果第一个数大于第二个数,就交换他们的位置,再取第二个数和第三个数比较,如果第二个数大于第三个数就再次交换位置,直到每两个相邻的都比较了一次,这样是一个循环,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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复