c语言中 排列偶数与奇数,奇数在后,偶数在前

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中 排列偶数与奇数,奇数在后,偶数在前相关的知识,希望对你有一定的参考价值。

#include "stdio.h"
void main()

int i,j,k,m,o,a[10000];
printf("输入要输入数的个数\n");
scanf("%d",&o);
printf("输入数\n");
for(i=1;i<o+1;i++)
scanf("%d",&a[i]);
for(i=1,j=o;i<o+1;i++,j=o)
if(a[i]%2!=0)
do
k=a[j]%2;
j--;


while(k==0);
if(j>=i)
m=a[++j];
a[j]=a[i];
a[i]=m;


for(i=1;i<o+1;i++)
printf(" %d ",a[i]);


请问哪里有逻辑错误,怎么运行之后排序出问题

void main()
 
    int i,j,k,m,o,a[10000]; 

    printf("输入要输入数的个数\\n"); 
    scanf("%d",&o); 

    printf("输入数\\n"); 

    for(i=1;i<o+1;i++) 
        scanf("%d",&a[i]);
     

    for(i=1,j=o;i<o+1;i++,j=o) 
            while (j >= 0 && (a[j] % 2) == 0)
                j--;
           

            if(j>=i)   
                m=a[j]; 
                a[j]=a[i]; 
                a[i]=m;
           
     

    for(i=1;i<o+1;i++) 
        printf("  %d  ",a[i]);
   

 while (1);

 

 

这样就OK

 

 

 

这个是我写的

---------------------------------------------------

void sort(int *aa, int size)

    int left, right, tmp;

    left = 0;
    right = size - 1;

    for (; left < right; )
        if ((aa[left] & 1))
            left++;
            continue;
                 

        if (!(aa[right] & 1))
            right--;
            continue;
         

        tmp = aa[left];
        aa[left] = aa[right];
        aa[right] = tmp;

        left++;
        right--;
           

void main()
 
    int i,j,k,m,o,a[10000]; 

    printf("输入要输入数的个数\\n"); 
    scanf("%d",&o); 

    printf("输入数\\n"); 

    for(i=1;i<o+1;i++) 
        scanf("%d",&a[i]);
     

 

 sort(a + 1, o);

 

    for(i=1;i<o+1;i++) 
        printf("  %d  ",a[i]);
   

 while (1);

 

 

 

--------------------------------------------------

参考技术A #include
<stdio.h>//主函数
#define
N
10
main()

int
A[10],B[10],i,j,p,s=0,h=5,k;//定义数组名与变量名
printf("输入十个数字、回车键确定:\n");
for
(i=0;i<10;i++)//遍历录入数组元素

scanf("%d",&A[i]);

for
(j=0;j<10;j++)//将偶数放在数组前面,奇数放在数组后面

p=A[j]%2;
if(p==0)

B[s]=A[j];
s++;

if(p==1)

B[h]=A[j];
h++;


printf("输出变换后的数组元素:\n");//遍历输出数组元素
for(k=0;k<10;k++)

printf("%d
",B[k]);

参考技术B #include <stdio.h>//主函数
#define N 10
main()

int A[10],B[10],i,j,p,s=0,h=5,k;//定义数组名与变量名

printf("输入十个数字、回车键确定:\n");

for (i=0;i<10;i++)//遍历录入数组元素

scanf("%d",&A[i]);


for (j=0;j<10;j++)//将偶数放在数组前面,奇数放在数组后面

p=A[j]%2;
if(p==0)

B[s]=A[j];
s++;

if(p==1)

B[h]=A[j];
h++;


printf("输出变换后的数组元素:\n");//遍历输出数组元素
for(k=0;k<10;k++)

printf("%d ",B[k]);



参考技术C #include "stdio.h"
#define N 10
void main()

int i=0,j=0;
int a[N];
int b[N];

printf("输入%d个整数:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);

for(i=0;i<N;i++)
if(a[i]%2==0)

b[j]=a[i];
j++;


for(i=0;i<N;i++)
if(a[i]%2!=0)

b[j]=a[i];
j++;



ps:不要鄙视我的方法,虽然算法很简单,但是完成了任务,而且效率比较高,缺点是占用资源较多
参考技术D 你的do while语句有问题
#include "stdio.h"
void main()

int i,j,k,m,o,a[10];
printf("please input the number of digits\n");
scanf("%d",&o);
printf("they are:\n");
for(i=1;i<o+1;i++)
scanf("%d",&a[i]);

for(i=1,j=o;i<o+1;i++,j=o)
if(a[i]%2==1)
k=a[j]%2;
while(k==1)
j--;k=a[j]%2;
if(j>=i)
m=a[j];
a[j]=a[i];
a[i]=m;



for(i=1;i<o+1;i++)
printf("%d ",a[i]);

我给你改了一下你试试看是不是这个思路~本回答被提问者和网友采纳

奇数偶数排序技巧分析

给定10个整数的序列,要求对其重新排序。排序要求:

1.奇数在前,偶数在后;

2.奇数按从大到小排序;

3.偶数按从小到大排序。

技巧用法:
思路 :在设置两个数组,将奇数和偶数分别存储在这两个数组中,最后在将这两个数组按要求顺序输出,那么我们既要记录新数组中的元素,又要记录新数组中的元素个数。这里有一个技巧;

int n=0;b[i],c[i]
if(a[i]%2==1)  ,b[++n]=a[i]   可一次性完成。。

 

以上是关于c语言中 排列偶数与奇数,奇数在后,偶数在前的主要内容,如果未能解决你的问题,请参考以下文章

输入 10 个整数,将这 10 个数按升序排列,并且奇数在前偶数在后?

请问在java数组中怎么判断奇数偶数的个数?

用数组编写:将一整数数列按奇数在前、偶数在后的顺序重新排放,并要求奇偶数两部分分别有序

空瓶换水喝水问题?给一个数组,如何让奇数在前偶数在后?C语言从入门到入土(进阶篇)(算法篇p5)

使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列

算法 调整数组顺序,使得奇数在前偶数在后,分别保证奇数和偶数之间的相对位置不变