个数排序"/>
C++程序基础(10):C++打擂法和三个数排序
C++-打擂法和三个数排序
- 打擂法
- 三个数排序
- 例题
打擂法
擂台制,是生活中一种常见的比赛制度。
败者退出擂台,胜者继续接收挑战。
挑战擂主的选手称为挑战者,
胜利后继续接受挑战的选手称为擂主
这种不断挑战,不断守擂的过程就叫做擂台制。
我们将这种制度融入编程之中,
使它成为一种排序方法
比如,如果我们要确定一些数中的最大值,
我们可以通过打擂的方法,第一个数默认成为擂主,往后进行大小的比较,如果碰到比当前擂主大的数,那么这个数成为新的擂主
这种线性的比较方法,就叫做打擂法
很显然,每次我们需要寻找一个最大值时,都需要将这些数从前往后搜索一遍
那么打擂法的时间复杂度就为 O ( n ) O(n) O(n)
三个数排序
知道了打擂法的原理,我们可以来看一些实际的运用:
例题
题目描述:
假设,小明得到了三个数值 a , b , c a,b,c a,b,c,他想要知道这三个数值的大小关系,找到了你帮他对这三个数进行排序,要求从大到小排序。请编写代码实现这一功能
输入样例:
1 3 2
输出样例:
3 2 1
分析:
本题的排序只有三个数值,那么我们只需要通过打擂法一一将这些数字进行比较,如果碰到擂主比挑战者小的情况,就将这两个数调换位置即可
在调换位置时,我们可以用一个变量来辅助
这个变量存储擂主的值,在擂主被赋为一个新值时,挑战者可以赋值为这个变量的值,避免了数值覆盖的情况。
代码实现:
#include <bits/stdc++.h>
using namespace std;int main()
{int a,b,c,k;cin>>a>>b>>c;if(a<b)//不断打擂{k=a;//利用k将a和b进行调换位置a=b;b=k;}if(a<c){k=a;a=c;c=k;}if(b<c){k=b;b=c;c=k;}cout<<a<<" "<<b<<" "<<c<<endl;return 0;
}
此外,这里再介绍一种相对便捷的方法。
在C++中,有一个专门的快捷函数:
swap(a,b);
可以实现调换 a , b a,b a,b 数值的功能
那么以上的三个数排序代码就可以简化为:
#include <bits/stdc++.h>
using namespace std;int main()
{int a,b,c,k;cin>>a>>b>>c;if(a<b)//不断打擂{swap(a,b);//使用函数进行数值交换}if(a<c){swap(a,c);}if(b<c){swap(b,c);}cout<<a<<" "<<b<<" "<<c<<endl;return 0;
}
完结撒花
更多推荐
C++程序基础(10):C++打擂法和三个数排序
发布评论