蒜术师给了你一个 10个整数的序列,要求对其重新排序。排序要求:
-
奇数在前,偶数在后;
-
奇数按从大到小排序;
-
偶数按从小到大排序。
输入格式
输入一行,包含 10个整数,彼此以一个空格分开,每个整数的范围是大于等于 0,小于等于 100。
4 7 3 13 11 12 0 47 34 98
输出格式
按照要求排序后输出一行,包含排序后的 10 个整数,数与数之间以一个空格分开。
47 13 11 7 3 0 4 12 34 98
解题思路:在这里我想到了两种方法。第一种(利用到了三个数组),首先将数存入一个数组中,之后进行判断奇数存入b数组中,偶数存入c数组中,再分别对数组b,c进行冒泡排序(冒泡排序的思想:利用循环从第一个数开始与其他数依次比较,符合判断则进行下一次比较,不符则与该数互换位置),将他们按要求输出。第二中(利用一个数组),首先将数组的空间翻倍(如输入10个数,则空间定为20个)进行判断将奇数存入前10个中,偶数存入后10个中,在进行排序,最后输出。我在这里运用的第一种方法。
#include "stdio.h"
int main(){
int a[10],t,x=0,y=0,j,tmp;
int b[10],c[10];//b[10]存入奇数,c[10]存入偶数
for(t=0;t<10;t++){
scanf("%d",&a[t]);//利用数组将10个数存入
if(a[t]>=1&&a[t]%2!=0){//当数为奇数时
b[x]=a[t];//存入b中
x++;}//记录有几个数
if(a[t]%2==0){//当数为偶数时
c[y]=a[t];//存入c中
y++;}//记录有几个数
}
for(t=0;t<x;t++){//利用冒泡排序奇数从大到小排序
for(j=x-1;j>t;j--){
if(b[j]>b[j-1]){
tmp=b[j];
b[j]=b[j-1];
b[j-1]=tmp;
}
}
}
for(t=0;t<x;t++) printf("%d ",b[t]);//输出奇数
for(t=0;t<y;t++){//利用冒泡排序将偶数从小到大排序
for(j=y-1;j>t;j--){
if(c[j]<c[j-1]){
tmp=c[j];
c[j]=c[j-1];
c[j-1]=tmp;
}
}
}
for(t=0;t<y;t++)printf("%d ",c[t]);//输出偶数
return 0;
}
结果如下: