CSDN每日一练奇偶排序 C语言

  • Post author:
  • Post category:其他


题目名称:奇偶排序

时间限制: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 版权协议,转载请附上原文出处链接和本声明。