题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解答:
#include<stdio.h>
void ReorderOdd(int *data,int length)
{
if(data==NULL||length<0)
return;
//定义两个指针,一个头,一个尾
int *begin=data;
int *end=data+length-1;
while(begin<end)
{
// 若为奇数,则指针后移,若为偶数则停止(指针始终指向偶数)
while(begin<end&&(*begin&0x01)!=0)
begin++;
// 若为偶数,则指针后移,若为奇数则停止(指针始终指向奇数)
while(begin<end&&(*end&0x01)==0)
end--;
// 若偶数在奇数前,则交换
if(begin<end)
{
int temp;
temp=*begin;
*begin=*end;
*end=temp;
}
}
printf("data:\n");
int i=0;
for(i;i<length;i++)
{
printf("%d\t",data[i]);
}
}
int main(int argc, const char *argv[])
{
int a[]={1,2,3,4,5};
ReorderOdd(a,5);
return 0;
}