题目:输入一个整形数组,将数组重新排序,使得所有奇数在前偶数在后,并使奇数之间和偶数之间的相对位置爆出不变。
思想:从数组开头开始遍历所有数组。当碰到偶数时,将偶数打包,即记录到目前为止偶数的个数,把这些偶数看成一个整体;当碰到奇数时,将这个奇数与前面的偶数整体对调位置。
#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; }
时间: 2024-10-07 05:31:31