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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法 调整数组顺序,使得奇数在前偶数在后,分别保证奇数和偶数之间的相对位置不变相关的知识,希望对你有一定的参考价值。

题目:输入一个整形数组,将数组重新排序,使得所有奇数在前偶数在后,并使奇数之间和偶数之间的相对位置爆出不变。

思想:从数组开头开始遍历所有数组。当碰到偶数时,将偶数打包,即记录到目前为止偶数的个数,把这些偶数看成一个整体;当碰到奇数时,将这个奇数与前面的偶数整体对调位置。

#include <stdio.h>
#include <stdlib.h>

void nuo(int *a,int j,int nu)                     //将奇数与前面所有偶数调换位置
{
        int b=a[j];
        while(nu--){
                a[j]=a[j-1];
                j--;
                   }
        a[j]=b;
}

int main()
{
        int* a;
        int i = 0 ;
        int j = 0 ;
        int nu= 0 ;
        printf("请输入数组个数:\n");
	scanf("%d",&i);
	a=malloc(sizeof(int)*i);
	printf("请输入数组,之间用逗号隔开:\n");
	for(;j<i;j++){
		scanf("%d,",&a[j]);
	}
	j=0;
        while(i!=j){
                if(a[j]%2==1){                   //这个数为奇数
                        nuo(a,j,nu);
                        j++;
                              }
                else{                            //当这个数为偶数时,记录偶数个数
                        j++;
                        nu+=1;
                    }
           }
        printf("a[%d]=",i);
        j=0;
        while(i!=j){
        printf("   %d",a[j++]);
                   }
        printf("\n");
        return 0;
}


本文出自 “凌峰2019” 博客,请务必保留此出处http://lingfeng2019.blog.51cto.com/12741667/1910061

以上是关于算法 调整数组顺序,使得奇数在前偶数在后,分别保证奇数和偶数之间的相对位置不变的主要内容,如果未能解决你的问题,请参考以下文章

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

c语言分段排序 整型数组,偶数在前,奇数在后,从小到大

算法题:奇数在前 偶数在后,相对顺序保持不变

剑指Offer21,调整数组顺序使奇数位于偶数前面

调整数组顺序使奇数位于偶数前面

编程题--调整奇偶顺序