信奥赛CSP-J复赛集训(语法基础专题)(1):三位数排序(文末附讲课视频)
信奥赛CSP-J复赛集训(语法基础专题)(1):三位数排序(文末附讲课视频)
三位数排序
题目描述
给出三个整数 a , b , c a,b,c a,b,c,要求把这三位整数从小到大排序。
输入格式
输入三个整数 a , b , c ( 0 ≤ a , b , c ≤ 100 ) a,b,c(0\le a,b,c \le 100) a,b,c(0≤a,b,c≤100),以空格隔开。
输出格式
输出一行,这三个整数从小到大排序后的结果(用空格隔开)。
输入输出样例 1
输入 1
1 9 8
输出 1
1 8 9
输入输出样例 2
输入 2
5 3 1
输出 2
1 3 5
AC代码
#include<bits/stdc++.h>
using namespace std;/*
功能分析:
该程序通过三次比较和可能的交换操作,将输入的三个整数按从小到大的顺序排列。
思路分三步:
1. 首先比较前两个数a和b,确保a <= b;
2. 接着比较b和c,确保此时b <= c,此时c为最大值;
3. 最后再次比较a和b,确保a <= b,从而完成整个排序。
*/int a, b, c, tmp;int main() {cin >> a >> b >> c;// 第一步:确保a <= bif (a > b) {tmp = a;a = b;b = tmp;}// 第二步:确保b <= c,此时c为最大值if (b > c) {tmp = b;b = c;c = tmp;}// 第三步:再次确保a <= b(前两步可能导致a > b)if (a > b) {tmp = a;a = b;b = tmp;}// 输出排序后的结果cout << a << " " << b << " " << c;return 0;
}
注释说明
-
头文件与命名空间: 使用
bits/stdc++.h
包含所有标准库,简化代码。 -
变量声明:
a, b, c
存储输入的三位数,tmp
用于临时交换。 -
输入处理: 从标准输入读取三个整数。
-
第一步交换: 比较
a
和b
,若a > b
则交换,确保a <= b
。 -
第二步交换: 比较
b
和c
,若b > c
则交换,确保b <= c
,此时c
为最大值。 -
第三步交换: 再次比较
a
和b
,处理前两步可能导致的a > b
情况,确保最终a <= b <= c
。 -
输出结果: 按升序输出排序后的三个数。
功能分析
-
逐步排序策略:
- 通过三次比较交换操作,逐步固定最大值并调整剩余数的顺序。
- 类似冒泡排序的思想,每次将较大值向后移动。
-
具体步骤解析:
- 第一次交换确保前两个数有序。
- 第二次交换将最大值移动到末尾(
c
的位置)。 - 第三次交换处理前两次交换可能导致的前两位无序问题,确保整体有序。
-
时间复杂度:
- 仅三次比较和最多三次交换,时间复杂度为O(1),效率极高。
-
适用性:
- 仅适用于三个数的排序,对于更大规模的数据需采用更通用的排序算法(如快速排序、归并排序等)。
本次课讲课视频:
信奥赛CSP-J复赛集训(语法基础专题)(1):三位数排序
156课时csp信奥赛c++复赛集训课:
csp信奥赛复赛12大高频考点专题集训,助力你冲刺csp一等奖
课程直通链接:
https://edu.csdn.net/course/detail/40437
csp信奥赛复赛集训课涵盖12大高频考点专题集训内容:
1、语法基础专题
2、数学思维专题
3、模拟算法专题
4、排序算法专题
5、贪心算法专题
6、二分算法专题
7、前缀和&差分
8、深度优先搜索
9、广度优先搜索
10、动态规划专题
11、栈和队列专题
12、树和图专题