1181:整数奇偶排序?

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;
}