wrsndmy


私信TA

用户名:794132422

访问量:6349

签 名:

等  级
排  名 2087
经  验 2340
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

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

        

        冒泡排序是指,先取第一个数和第二个数比较大小,如果第一个数大于第二个数,就交换他们的位置,再取第二个数和第三个数比较,如果第二个数大于第三个数就再次交换位置,直到每两个相邻的都比较了一次,这样是一个循环,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 人评分

  评论区