蒜术师给了你一个 10 个整数的序列,要求对其重新排序。排序要
-
奇数在前,偶数在后;
-
奇数按从大到小排序;
-
偶数按从小到大排序。
输入格式
输入一行,包含 10 个整数,彼此以一个空格分开,每个整数的范围是大于等于 0,小于等于 100。
输出格式
按照要求排序后输出一行,包含排序后的 10 个整数,数与数之间以一个空格分开。
#include<stdio.h>
int main(){
int i;
int zong[10]; //定义一个数组,利用下面的for循环将输入的数存入
for(i=0;i<10;i++){
scanf("%d",&zong[i]);
}
int js[10],os[10],n=0,cnt=0,m=0,cmt=0;//定义俩个数组分别利用下列for循环存入奇数和偶数
for(i=0;i<10;i++){
if(zong[i]%2){
js[n++]=zong[i];
cnt++; //cnt与cmt都是为下列的插入排序做准备
}else{
os[m++]=zong[i];
cmt++;
}
}
int a,tn; //用tn来暂存奇数来进行降序排列
for(n=1;n<cnt;n++){
a=n-1;
tn=js[n];
while(js[a]<tn&&a>=0){
js[a+1]=js[a];
a--;
}
js[++a]=tn;
}
int b,tm; //用tm来暂存偶数来进行升序排列
for(m=1;m<cmt;m++){
b=m-1;
tm=os[m];
while(os[b]<tm&&b>=0){
os[b+1]=js[b];
b--;
}
os[++b]=tm;
}
for(n=0;n<cnt;n++){ //输出奇数数组中已经排序好的数,下同
printf("%d ",js[n]); //%d后面有空格是要满足数与数之间隔开
}
for(m=0;m<cmt;m++){
printf("%d ",os[n]);
}
return 0;
}
注:
该排序方法用的是插入排序法,对其数组里的数进行排序完然后输出 ;
第一个for循环是为了往数组的存数,要记住一般有数组,必有for循环。