06:整数奇偶排序

  • Post author:
  • Post category:其他


总时间限制: 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;
}



版权声明:本文为weixin_44437496原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。