1181:整数奇偶排序
【题目描述】
给定10个整数的序列,要求对其重新排序。排序要求:
1.奇数在前,偶数在后;
2.奇数按从大到小排序;
3.偶数按从小到大排序。
【输入】
输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于30000。
【输出】
按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。
【输入样例】
4 7 3 13 11 12 0 47 34 98
【输出样例】
47 13 11 7 3 0 4 12 34 98
#include
using namespace std;
int a[15],i,j,n=10,ma;
int main()
{
for(i=0;i>a[i];
}
for(i=0;ima=0;
for(int j=1;jif(a[j]>a[ma])
{
ma=j;
}
}
swap(a[ma],a[n-i]);
}
for(i=n-1;i>=0;i--)
{
if(a[i]%2==1)
{
cout<' ';
}
}
for(i=0;iif(a[i]%2==0)
{
cout<" ";
}
}
return 0;
}
选择排序,样例多出一个0,少一个98
冒泡:
#include<bits/stdc++.h>
using namespace std;
int d,a[20],b[20],m=0,n=0,i,j;
int main() {
for(i=0; i<10; i++) {
cin>>d;
if(d%2==1) {
a[m++]=d;
} else {
b[n++]=d;
}
}
for(i=0; i<m; i++)
for(j=i+1; j<m; j++)
if(a[i]<a[j]) {
swap(a[i],a[j]);
}
for(i=0; i<n; i++)
for(j=i+1; j<n; j++)
if(b[i]>b[j]) {
swap(b[i],b[j]);
}
for(i=0; i<m; i++)
cout<<a[i]<<" ";
for(i=0; i<n; i++)
cout<<b[i]<<" ";
cout<<endl;
return 0;
}
选择:
#include<bits/stdc++.h>
using namespace std;
int c,a[100],b[100],s=0,k=0,i,j,ma,mi;
int main() {
for(i=0; i<10; i++) {
cin>>c;
if(c%2==1) a[s++]=c;
else b[k++]=c;
}
for(i=1; i<s; i++) {
ma=0;
for(j=1; j<=s-i; j++) {
if(a[j]<a[ma]) {
ma=j;
}
}
if(ma!=s-i) {
swap(a[s-i],a[ma]);
}
}
for(i=1; i<k; i++) {
mi=0;
for(j=1; j<=k-i; j++) {
if(b[j]>b[mi]) {
mi=j;
}
}
if(mi!=k-i) {
swap(b[k-i],b[mi]);
}
}
for(i=0; i<s; i++)
cout<<a[i]<<" ";
for(i=0; i<k; i++)
cout<<b[i]<<" ";
return 0;
}
插入:
```c++
#include<bits/stdc++.h>
using namespace std;
int c,a[100],b[100],s=0,k=0,i,j,t,r,y;
int main() {
for(i=0; i<10; i++) {
cin>>c;
if(c%2==1) a[s++]=c;
else b[k++]=c;
}
for(i=1; i<s; i++) {
for(j=0; j<i; j++)
if(a[j]<=a[i]) break;
if(j!=i) {
t=a[i];
for(r=i-1; r>=j; r--) {
a[r+1]=a[r];
}
a[j]=t;
}
}
for(i=1; i<k; i++) {
for(j=0; j<i; j++)
if(b[j]>=b[i]) break;
if(j!=i) {
y=b[i];
for(r=i-1; r>=j; r--) {
b[r+1]=b[r];
}
b[j]=y;
}
}
for(i=0; i<s; i++)
cout<<a[i]<<" ";
for(i=0; i<k; i++)
cout<<b[i]<<" ";
return 0;
}
1.奇数在前,偶数在后;
分成两个数组来各自排序就好了。
就是先从大到小排好序,然后奇数顺序输出,偶数倒序输出
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[15],i,j,n=10;
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j] < a[j+1])
{
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
for(i=0;i<n;i++)
{
if(a[i]%2==1)
{
cout<<a[i]<<' ';
}
}
for(i=n-1;i>=0;i--)
{
if(a[i]%2==0)
{
cout<<a[i]<<" ";
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){
int j[10],o[10],i,n,a[10],t1=0,t2=0;
for(i=0;i<10;i++){//输入每个数
cin>>a[i];
if(a[i]%2)//如果是奇数
j[t1++]=a[i];//加入
else//偶数
o[t2++]=a[i];//加入
}
sort(j,j+t1,greater<int>());//奇数,按降序排序
sort(o,o+t2);//偶数按升序排序
for(i=0;i<t1;i++)cout<<j[i]<<" ";//先输出奇数
for(i=0;i<t2;i++)cout<<o[i]<<" ";//在输出偶数
return 0;
}
望采纳
供参考:
#include <stdio.h>
int main()
{
int n = 10,i,j,tmp;
int a[10];
for (i = 0;i < n;i++)
scanf("%d", &a[i]);
for (i = 0;i < n - 1;i++){
for (j = 0;j < n - i - 1;j++){
if (a[j] % 2 == 0 && a[j+1] % 2 != 0 || //a[j]为偶数,a[j+1]为奇数,奇数在前,偶数在后
a[j] % 2 != 0 && a[j+1] % 2 != 0 && a[j] < a[j+1] || //a[j]为奇数,a[j+1]为奇数,且a[j]<a[j+1]
a[j] % 2 == 0 && a[j+1] % 2 == 0 && a[j] > a[j+1]) // a[j]为偶数,a[j+1]为偶数,且a[j]>a[j+1]
{
tmp = a[j];
a[j]= a[j+1];
a[j+1]=tmp;
}
}
}
for (i = 0;i < n;i++)
printf("%d ", a[i]);
return 0;
}