xdoj_排序2

问题描述:    
给定N个不同的整数,要求对这N个整数按如下规则排序并输出。
规则一:所有的偶数排在奇数前面。
规则二:在规则一的前提下按照从大到小的顺序排序。

输入说明    
数据由两行构成,第一行为整数n(n<=100),
表示待排序整数的数量。第二行是n个整数,
每个整数的取值区间都为[-32768~32767],
整数之间以空格间隔。

输出说明    
在一行输出排好序的整数,整数之间以空格间隔。

输入样例    

1 2 3 4 5

输出样例    
4 2 5 3 1

注:起泡排序用的计数器,与指示变量效果相同

#include<stdio.h>

int main()
{
	int n,a[150],j = 0,b[150];
	int d,c,count_1 = 0,count_2 = 0;
	scanf("%d",&n);
	for(int i = 0 ; i < n ; i ++){
		scanf("%d",&a[i]);
		if(a[i] % 2 == 0){
			b[j] = a[i];
			j++;
		}
	}
	//输入a数列,用b数列并记录a中的偶数
	d = j;
	//用d记录偶数的个数
	for(int i = 0 ; i < n ; i++){
		if(a[i] % 2 == 1){
			b[j] = a[i];
			j++;
		}
		
	}
	//用b数列记录a中的奇数
	//做到偶数在前,奇数在后
	while(d != 0 && count_1 != d-1){
		count_1 = 0;
		for(int k = 1 ; k < d ;k++){
			if(b[k-1]<b[k]){
				c = b[k];
				b[k] = b[k-1];
				b[k-1] = c; 
			}else{
				count_1++;
			}
		}
	}
	//起泡排序,把b数列中偶数从大到小排列
	while(j - d != 0 && count_2 != j - d - 1){
		count_2 = 0;
		for(int k = d + 1 ; k < j ;k++){
			if(b[k-1]<b[k]){
				c = b[k];
				b[k] = b[k-1];
				b[k-1] = c; 
			}else{
				count_2++;
			}
		}
	}
	//起泡排序,把b数列中奇数从大到小排列
	for(int i = 0 ; i < j ; i++){
		printf("%d ",b[i]);
	}
	//输出排列好的b数列
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值