题目名称:奇偶排序
    
    时间限制:1000ms内存限制:256M
    
    题目描述
    
    一个数组里有奇数有偶数(乱序),调整数组顺序使奇数位于偶数前面。(测试用例仅做参考,我们会根据代码质量进行评分)
   
    输入描述:
    
    第一行输入整数n。 第二行输入n个整数。
   
    输出描述:
    
    输出排序后的n个整数。
   
    示例
    
    示例1
    
    输入
   
4
2 3 1 23
输出
3 1 23 2
所需变量
int ji[100005] ;//用于装每一个奇数的数组
int ou[10005] ;//用于装每一个偶数的数组
int n; //用于输入这个数组有多少个数
int temp;//用于接受每一个未分组的数字
int i; //循环变量
int jii;//奇数的循环变量
int oui;//偶数的循环变量
int control;//用于判断第一个数是否已经输入
    思路:我们可以可以将所有数字先输入进来,然后再判断这个数是奇数还是偶数,然后再将它分组,分组后记得将后面那个数置为-1,这样好判断未来的终止条件。
    
    然后再将每个数组中的数一个一个输出出来就完成了。
    
    该算法本人认为还是比较优的,如果有更好的想法,欢迎q我!
    
    代码如下(编译器是dev,语言是C语言):
   
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
int ji[100005] = {0},ou[100005] = {0},n,temp,i,jii = 0,oui = 0,control = 0;
int main(){
    ji[0] = -1;
    ou[0] = -1;
    scanf("%d",&n);
    for(i = 0;i<n;i++){
        scanf("%d",&temp);
        if(temp%2 == 0){
            ou[oui++] = temp;
            ou[oui] = -1;
        }else{
            ji[jii++] = temp;
            ji[jii] = -1;
        }
    }
    i = 0;
    while(true){
        if(ji[i] == -1){
            break;
        }
        if(control == 0){
            printf("%d",ji[i]);
            control = 1;
        }else{
            printf(" %d",ji[i]);
        }
        i++;
    }
    i = 0;
    while(true){
        if(ou[i] == -1){
            break;
        }
        if(control == 0){
            printf("%d",ou[i]);
            control = 1;
        }else{
            printf(" %d",ou[i]);
        }
        i++;
    }
    printf("\n");
    return 0;
}
     
   
 
版权声明:本文为weixin_43708800原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
