题目:
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void swap(int *p,int len)
{
int *q = p + len - 1; //最后一个元素的地址
int tmp; // 定义一个中间变量,下面交换时会用到
assert(p != NULL); //指针不能为空,所以在这里需要断言
while(p < q)
{
while((*p & 1) == 1) //一个数跟1 与 了之后,如果是1 ,说明它是奇数。
{
p++; // 根据题意,奇数在前,所以不做操作,判断下一个数
}
while((*q & 1) == 0) //如果一个数跟 1 与了之后,如果是0 ,说明它是偶数,
{
q--; //因为q是指向最后一个数的,所以如果它是偶数,那符合题意,就往前一个数去找。
}
if(p < q) //满足p<q的条件后,
{
tmp = *p; //奇数位和偶数位交换
*p = *q;
*q = tmp;
}
}
return;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int len = sizeof(arr)/sizeof(arr[0]);
int i= 0;
int k;
printf("请输入一个数组:");
for(k = 0;k<len;k++)
{
printf("%d ",arr[k]); //这里是打印出原数组
}
printf("\n");
swap(arr,len);
printf("调整后的数组为:");
for(i= 0;i<len;i++)
{
printf("%d ",arr[i]); //输出下标为i——len-1的数字
}
printf("\n");
system("pause");
return 0;
}