/*
*function:将一个数组中的所有奇数移到偶数之前,要求奇偶内部有序
*way:用动态分配的方法输入一个数组,再将其分开成奇偶两个数组
* 最后分别实现冒泡排序,比较大小
*Note: use free(point) and point=NULL to release the memory
*/
#include<stdio.h>
#include<stdlib.h> //malloc、realloc
void order(int a[],int length);//冒泡排序算法
int main()
{
printf("请输入整数数组:\n");
int odd[128],eve[128],n=0;//定义奇偶数组
/*输入整型数组*/
int *p = NULL;
static int k=0;
char ch;
p = (int *)malloc(n*sizeof(int));//分配内存
while( (ch=getchar()) != '\n')
{
ungetc(ch,stdin);
p=(int *)realloc(p,++n*sizeof(int));//增加内存
scanf("%d",&p[k++]);//输入数组
}
/*将输入数组分开成奇偶两个数组*/
static int a=0,b=0;//统计奇偶数组长度
for(int i=0; i < n; i++)
{
if((p[i]%2) == 0)
{
eve[a] = p[i];//偶数组
a++;
}
else
{
odd[b]=p[i];//奇数组
b++;
}
}
order(eve,a);//偶数组内部排序
order(odd,b);//奇数组内部排序
for(int i=0; i<b; i++)
{
printf("%d ",odd[i]);
}
for(int i=0; i<a; i++)
{
printf("%d ",eve[i]);
}
printf("\n");
free(p);//释放内存空间,防止内存泄漏
p = NULL;//指针赋值空,避免错误引用
return 0;
}
/*冒泡排序算法*/
void order(int a[],int length)
{
int flag=1;
for(int i=0;i<length && flag;i++)
{
flag=0;
for(int j=0; j<length-1-i; j++)
{
if(a[j]>a[j+1])
{
flag=1;
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
(C)输入整数数组,奇数移到偶数之前且奇偶部分分别有序(2019.11.7)
最新推荐文章于 2020-12-01 16:54:43 发布