ASCII码排序 HDU - 2000

ASCII码排序 HDU - 2000

Time limit:1000 ms Memory limit :32768kB
OS :Windows Source: C语言程序设计练习(一)

Problem Description:输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。

Input:输入数据有多组,每组占一行,有三个字符组成,之间无空格。

Output:对于每组输入数据,输出一行,字符中间用一个空格分开。

Sample Input:

qwe
asd
zxc

Sample Output:

e q w
a d s
c x z

问题链接:ASCII码排序 HDU - 2000
问题简述:输入3个字符,按AsCII升序排列,测试数据有多组。
问题分析:本题选用了选择排序法将字符进行排序
选择排序法的思路如下:

第1趟,在待排序记录r[1]r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

简单来说就是遍历字符串,以升序排序为例,在第1次排序中,第一个元素与其他元素相互比较,若第一个元素比之后遍历到的对应元素要大,则交换他们的值,每一趟排序都找出最小值并放在第一个位置,第2趟排序则从第二个元素开始遍历,以此类推。(个人理解,如有错误,欢迎纠正)
动图如下:

在这里插入图片描述
AC的C++代码如下:

#include <iostream>
using namespace std;
int main()
{

	char a[3]; int i;
	
	while (cin >> a)//选择排序
	{
		for (i = 0; i < 3; i++)
		{
			for (int j = i + 1; j < 3; j++)
			{
				if (a[i] > a[j])
				{
					char temp = a[i];
					a[i] = a[j];
					a[j] = temp;
				}
			}
		}
		
		i = 0;
		while (a[i])//输出排序后的字符串
		{
			if (i < 2)
				cout << a[i] << " ";
			else
				cout << a[i];
			i++;
		}
		cout << endl;
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值