查看原文
其他

【编程练习】三个整数的排序

正念君 嵌入式大杂烩 2021-01-31


题目:输入三个正整数x,y,z,请把这三个数由小到大输出。


【方法一】这是C语言教程里常出现的一道题。处理方法是:假设最小的数为x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,最后再比较y与z的值。

示例程序:

#include <stdio.h>

int main(void)
{
   int x,y,z,t;
   printf("\n请输入三个正整数:\n");
   scanf("%d %d %d", &x, &y, &z);
   if (x > y)
 {
   /*交换x,y的值*/
       t = x;
   x = y;
   y = t;
   }
   if(x > z)
 {
   /*交换x,z的值*/
       t = z;
   z = x;
   x = t;
   }
 
   if(y > z)
 {
   /*交换z,y的值*/
       t = y;
   y = z;
   z = t;
   }
   printf("从小到大排序: %d %d %d\n",x,y,z);
 
 return 0;
}


程序输出结果如:



【方法二】假如题目给的限定条件不是3个数,而是很多个数呢?不能再用方法一依次罗列出来进行比较了吧。这时可使用一些排序算法(如冒泡排序、快速排序、选择排序等)。

冒泡排序程序示例:

#include <stdio.h>

// 函数声明
void swap(int array[], int i, int j);
void BubbleSortSmallToBig(int array[], int len);

int main(void)
{
 int a[3];
 printf("\n请输入三个正整数:\n");
 scanf("%d %d %d", &a[0], &a[1], &a[2]);
 BubbleSortSmallToBig(a,3);
 printf("从小到大排序: %d %d %d\n",a[0],a[1],a[2]);
 return 0;
}

//数组内元素交换
void swap(int array[], int i, int j)
{
 int temp = array[i];
 array[i] = array[j];
 array[j] = temp;
}

//冒泡排序:从小到大排序
void BubbleSortSmallToBig(int array[], int len) // O(n*n)
{
 int i = 0;
 int j = 0;
 int temp=0;
 for(i = 0; i < len; i++) //
 {
   for(j = len-1; j > i; j--)
   {
     if( array[j] < array[j-1] )
     {
       swap(array, j, j-1);
     }
   }
 }
}


这是一道常见的排序编程练习题。整数的数目小于等于三个时可用一般的比较方法。当排序的整数个数比较多时可以使用一些排序算法。每天进步一点点,关注小编,每天和小编一起打卡学习吧!


往期精彩推荐

智能桌面天气预报系统(终)

分享一个很酷的技巧

【RT-Thread笔记】裸机系统与多线程系统

【编程练习】求正整数的位数,并逆序打印

后台回复:C101,获取【入门C语言最好的书籍】

后台回复:C000,获取【热门C语言电子书】

后台回复:CV000,获取【热门C语言视频教程】

后台回复:py001,获取【编程小白的第一本python入门书】


关注公众号获取更多资源分享!


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存