每日一题
题目:给出三个整数 a,b,c,要求把这三位整数从小到大排序。 算法思想:
1. 思路一:如果小白做题可以简单地让三个数两两比 较,scanf 和printf 即可 2. 思路二:可以使用 if 语句进行条件判断,如果 a 大于 b,则借助于中间变量 t 互换 a 与 b 值, 依此类推比较 a 与 c、b 与 c,最终结果即为 a、b、c 的升序排列。 3. 思路三(冒泡排序法)从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。本题从小到大排序,如果n个数,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。 4.思路四:使用C语言中qsort 函数来进行排序。 一、程序代码:(思路一)
#include<stdio.h>
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if(a < b && a < c) {
printf("%d ", a);
if(b < c) {
printf("%d %d", b, c);
} else {
printf("%d %d", c, b);
}
} else if(b < c) {
printf("%d ", b);
if(a < c) {
printf("%d %d", a, c);
} else {
printf("%d %d", c, a);
}
} else {
if(a < b) {
printf("%d %d %d", c, a, b);
} else {
printf("%d %d %d", c, b, a);
}
}
return 0;
}
运行结果:
2 5 3
2 3 5
二、程序代码:(思路二)
#include <stdio.h>
int main() {
int a, b, c, t;
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",a, b, c);
return 0;
}
运行结果:
9 8 20
8 9 20
三、程序代码:(思路三)
#include<stdio.h>
int main() {
int t, m[4], i, j;
scanf("%d %d %d",&m[1],&m[2],&m[3]);
for(j = 1; j <= 2; j++) {
for(i = 2; i <= 3; i++) {
if(m[j]>m[i]) {
t = m[i];
m[i] = m[j];
m[j] = t;
}
}
}
printf("%d %d %d", m[1],m[2],m[3]);
return 0;
}
运行结果:
3 5 4
3 4 5
四、程序代码:(思路四)
#include<stdio.h>
#include<stdlib.h>
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int main(){
int a[3];
scanf("%d %d %d", &a[0], &a[1], &a[2]);
qsort(a, 3, sizeof(int), comp);
printf("%d %d %d",a[0],a[1],a[2]);
return 0;
}
运行结果:
2 5 4
2 4 5
注: qsort() 函数用法为,qsort(数组名,元素个数,元素占用的空间(sizeof),比较函数),头文件为
#include<stdlib.h>
总结 个人认为,以上方法 ,冒泡排序为最佳选择,建议请指出哦
|