三整数排序

方法一:
三整数排序一共六种情况,最简单的就是用if else语句比较六次,代码如下:

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	if(a<=b&&b<=c) printf("%d %d %d",a,b,c);
	else if(a<=c&&c<=b) printf("%d %d %d",a,c,b);  //不用if的原因是为了排除如果三个整数一样使会输出六次结果的情况 
	else if(b<=a&&a<=c) printf("%d %d %d",b,a,c);
	else if(b<=c&&c<=a) printf("%d %d %d",b,c,a);
	else if(c<=a&&a<=b) printf("%d %d %d",c,a,b);
	else if(c<=b&&b<=a) printf("%d %d %d",c,b,a);
	return 0;
}

方法二:
另一种思路是假设a≤b≤c,首先检查a和b的值,如果a>b,则交换a和b,再检查a和c,最后检查b和c。
程序如下:

#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;	//执行完毕后a<=b 
	}
	if(a>c){
		t=a;a=c;c=t;	//执行完毕后a<=c,且a<=b依然成立 
	}
	if(b>c){
		t=b;b=c;c=t;
	}
	printf("%d %d %d\n",a,b,c);
	return 0;
}

### 关于三个整数排序的OJ在线判题及算法实现 #### C++ 实现整数排序 对于给定的三个整数 `x`, `y` `z` 的排序问题,可以采用多种方法来解决。以下是基于比较逻辑的一种简单实现方式[^3]: ```cpp #include<stdio.h> #include<math.h> int main() { int a, b, c, m; scanf("%d %d %d", &a, &b, &c); if (a < b) { // 如果第一个数小于第二个数,则交换两者位置 m = a; a = b; b = m; } if (c > a) { // 如果第三个数大于当前最大值,则调整顺序 m = c; c = a; a = m; } if (c > b) { // 调整中间值最小值的位置 m = b; b = c; c = m; } printf("%d %d %d\n", a, b, c); // 按从大到小输出结果 return 0; } ``` 上述代码通过多次条件判断实现了简单的冒泡排序思路,最终按照降序排列输出。 #### 使用 Timsort 算法完成排序 如果希望尝试更高效的排序算法,例如 Timsort,在 C++ 中可以通过 STL 提供的功能间接调用该算法[^1]。虽然标准库并未显式声明使用 Timsort,但实际上其内部可能结合了类似的优化策略。下面是一个利用 `std::sort()` 函数的例子: ```cpp #include<iostream> #include<algorithm> using namespace std; int main(){ int nums[3]; cin >> nums[0] >> nums[1] >> nums[2]; sort(nums, nums + 3, greater<int>()); cout << nums[0] << " " << nums[1] << " " << nums[2] << endl; return 0; } ``` 此段代码借助 STL 库中的 `greater<int>()` 自定义比较器,从而达到由高至低排序的效果。 #### 冒泡排序的具体应用实例 另一种常见的基础排序技术——冒泡排序也可以用来处理此类问题。下面是具体的实现过程[^2]: ```cpp void BubbleSort(int* a, int n){ for (int j = 0; j < n; j++){ bool swapped = false; for (int i = 1; i < n - j; i++) { if (a[i - 1] > a[i]){ swap(a[i - 1], a[i]); swapped = true; } } if (!swapped) break; } } int main(){ int data[] = {20, 16, 18}; BubbleSort(data, sizeof(data)/sizeof(data[0])); for(auto num : data){ cout<<num<<" "; } return 0; } ``` 以上展示了如何运用基本的冒泡排序机制对数组内的元素进行升序整理,并可通过修改比较操作符轻松转换成降序模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值