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;
}
}