系列文章目录
C-基础算法 求两个整数的较大值 两种计算平均成绩题型
前言
排序方法有很多种,将来博主会全部整理出一个专栏,有兴趣的小伙伴可以点个关注喔!今天讲最简单的三个整数的排序。如果有想要整理的资料或者算法可以评论区留言!
一、方法一:换位法
用 if 判断三个数的大小, 利用中间变量交换位置,得到想要的排列顺序
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int t = 0;
scanf("%d %d %d", &a, &b, &c);
if (a > b)
{
t = a;
a = b;
b = t;
}
if (a > c)
{
t = a;
a = c;
c = t;
}
if (b > c)
{
t = b;
b = c;
c = t;
}
printf("%d %d %d\n", a, b, c);
return 0;
}
二、方法二:函数调用法
我们在进行函数调用法的时候,要清楚的明白我们需要传值调用还是传址调用,这里明显是要改变 a b c 三个数的值,所以用传址调用,将地址传向函数,函数用指针接收
#include <stdio.h>
void sort(int* x, int* y, int* z)
{
int tmp = 0;
if (*x > *y)
{
tmp = *x;
*x = *y;
*y = tmp;
}
if (*x > *z)
{
tmp = *x;
*x = *z;
*z = tmp;
}
if (*y > *z)
{
tmp = *y;
*y = *z;
*z = tmp;
}
}
void print(int a, int b, int c)
{
printf("%d %d %d\n", a, b, c);
}
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d %d", &a, &b, &c);
sort(&a, &b, &c);
print(a, b, c);
return 0;
}
方法三:两两比较法
这种方法很好理解,但是代码实现比较费劲,一般不建议这么用,但为了拓宽思路,我们还是了解一下。
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d %d", &a, &b, &c);
if (a < b)
{
if (b < c)
{
printf("%d %d %d\n", a, b, c);
}
else
{
if (a < c)
{
printf("%d %d %d\n", a, c, b);
}
else
{
printf("%d %d %d\n", c, a, b);
}
}
}
return 0;
}
这边只列出了其中一种 a < b 的情况,还剩五种大家可以脑补,非常繁琐,不建议使用!!!
方法四:打擂法
定义一个最小值和最大值,让他们等于其中一个数,然后和另外两个比较,大的就替代最大值,小的替代最小值,类似于打擂的效果,最后用总值减去最大值和最小值即可得到中间值
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int max = 0;
int min = 0;
int mid = 0;
scanf("%d %d %d", &a, &b, &c);
max = min = a;
if (b > max)
{
max = b;
}
if (b < min)
{
min = b;
}
if (c > max)
{
max = c;
}
if (c < min)
{
min = c;
}
mid = a + b + c - max - min;
printf("%d %d %d\n", min, mid, max);
return 0;
}
这里需要注意不能用 if else 来写,if else 是如果 if 成立了,就不会执行 else 了,但我们这里每一个都需要判断,所以必须要用 if if 的写法
总结
以上就是关于三个整数排序的所有内容,虽然题目简单,但是方法多种多样,是不是有你没有想到的方法呢?如果觉得自己学到了,评论区666走一波哦! 最后别忘了点赞+ 关注+ 收藏!
|