1377 数组奇偶对调排序 C语言

来源:互联网 发布:cities skylines mac 编辑:程序博客网 时间:2024/05/17 05:00

问题 F: 数组奇偶排序(数组)

时间限制: 1 Sec 内存限制: 128 MB
提交: 195 解决: 89
[提交][状态][讨论版]
题目描述

输入n,输入n个整数。调整数字位置使得偶数在序列的前半部分,奇数在序列的后半部分。
注:自己根据样例输入、输出找到算法。
要求算法的时间复杂度为O(n)。

输入
测试次数t
每组测试数据格式如下:
整数个数n,后跟n个整数

输出
对每组测试数据,输出整数个数和调整后的整数序列

样例输入
3
4 1 2 3 4
8 12 32 67 13 1 9 4 97
6 1 32 9 43 12 0

样例输出
4 4 2 3 1
8 12 32 4 13 1 9 67 97
6 0 32 12 43 9 1

#include<stdio.h>int main() {    int a[50],i,j,k,t,n,tmp;    int oddindex,evenindex;    scanf("%d",&t);    while(t--) {        scanf("%d",&n);        for(i=0; i<n; i++) {            scanf("%d",&a[i]);        }        oddindex=0;        evenindex=n;        /**        *整体的思路就是         *从前往后用i下标找奇数         *从后往前找j下标偶数         *找到之后对调两个的值        *直到i j下标相遇        **/        while(oddindex<evenindex) {            for(i=oddindex; i<evenindex; i++) {                //from head find odd                if(a[i]%2==1) {                    oddindex =i;                    break;                }            }            for(j=evenindex-1; j>oddindex-1; j--) {                //from bottom find even                if(a[j]%2==0) {                    evenindex =j;                    break;                }            }            if(i<j) {                tmp=a[i];                a[i]=a[j];                a[j]=tmp;                i++;                j--;            }else{                break;            }        }        printf("%d ",n);        for(i=0; i<n; i++) {            if(i==n-1) {                printf("%d\n",a[i]);            } else {                printf("%d ",a[i]);            }        }    }    return 0;}/**************************************************************    Problem: 1377    Language: C++    Result: 正确    Time:0 ms    Memory:800 kb****************************************************************/
原创粉丝点击