输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分
下列代码为无函数调用时的代码
#include<stdio.h>
#include<windows.h>
int main()
{
int a[] = { 0, 1, 2, 3, 4, 9, 0, 2, 3, 1, 4 };
int len = sizeof(a) / sizeof(a[0]);
int b[5];
int c[4];
int i, j=0, h=0;
for (i = 0; i < len; i++)
{
if (a[i] % 2 != 0)
{
b[j] = a[i];
j++;
}
else
{
c[h] = a[i];
h++;
}
}
printf("新的数组为:");
for (j = 0; j <= 4; j++)
printf("%d ", b[j]);
for (h = 0; h <= 5; h++)
printf("%d ", c[h]);
system("pause");
return 0;
}
显然,在上述代码中,b[ ] 和c[ ] 的元素个数是数出来后手动输入的,那么应该如何避免手动输入元素个数呢?
解决方法:将奇数保留,偶数放置在数组的最末位,再将末尾的数字调换至前面位置。
调用函数的代码如下:#include<stdio.h>
#include<windows.h>
void sort(int *a, int len)
{
int i = 0;
int j = len - 1;
for (i = 0; i != j; i++)
{
if (a[i] % 2 != 0)
continue;
else
{
int t = a[i];
a[i] = a[j];
a[j] = t;
if (a[j] % 2 == 0)
j--;
i--;
}
}
}
int main()
{
int a[] = { 0, 1, 2, 3, 4, 9, 0, 2, 3, 1, 4 };
int len = sizeof(a) / sizeof(a[0]);
int i;
sort(a, len);
for (i = 0; i<lem; i++)
{
printf("%d ", a[i]);
}
system("pause");
return 0;
}