06:整数奇偶排序

总时间限制: 1000ms 内存限制: 65536kB
描述
给定10个整数的序列,要求对其重新排序。排序要求:

1.奇数在前,偶数在后;

2.奇数按从大到小排序;

3.偶数按从小到大排序。

输入
输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于100。
输出
按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。
样例输入
4 7 3 13 11 12 0 47 34 98
样例输出
47 13 11 7 3 0 4 12 34 98
来源
1873
解析
使用哈希排序的思想,输入一个数后判断该数有没有出现,出现了几次,然后将所有的数由小到大输出(出现多次的数就多次输出)。
即数组num[x]=k就表示在所有输入的数字中,x出现过k次。 初始时全部置为0,表示所有的数没有出现过。当所有的数据全部输入后,数组num就记下了所有数字的数量,按题目中要求的顺序将所有的数字输出即可。

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	//num[x]用来判断数字x有没有出现,出现了几次。 初始时置为0
	int num[105];
	memset(num,0,sizeof(num));
	
	for(int i=0;i<10;i++){
		int x;
		cin>>x;
		num[x]++;
	}
	//先处理奇数,并且由大到小输出 
	for(int i=99;i>=1;i-=2){
		while(num[i]--){
			cout<<i<<' ';
		}
	}
	//再处理偶数,并且由小到大输出 
	for(int i=0;i<=100;i+=2){
		while(num[i]--){
			cout<<i<<' ';
		}
	}
	return 0;
}
发布了36 篇原创文章 · 获赞 0 · 访问量 331

猜你喜欢

转载自blog.csdn.net/weixin_44437496/article/details/104056682