输入一个整数数组,实现一个函数来调整该数组中字数的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
可以用运两个指针,第一个指针初始化时指向数组的第一个数字,它指向后移动。第二个指针初始化时指向数组的最后一个数字,它只向前移动,两个指针相遇之前,第一个指针总是位于第二个指针前边。
(1)当第一个指针指向奇数时向后移动,当第二个指针指向偶数时向前移动;
(2)反之交换这两个数字;
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
void reorderarray(int *pdata,int length)
{
int *pstart=pdata;
int *pend=pdata+length-1;
int temp;
assert(pdata);
if(*pdata==NULL||length==0)
{
return;
}
while(pstart<pend)
{
//向后移动pstart直到遇到偶数为止
while(pstart<pend&&(*pstart&1)!=0)
{
pstart++;
}
//向前pend移动直到遇到奇数为止
while(pstart<pend&&(*pend&1)==0)
{
pend--;
}
if(pstart<pend)
{
temp=*pstart;
*pstart=*pend;
*pend=temp;
}
}
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int length=sizeof(arr)/sizeof(arr[0]);
int i=0;
reorderarray(arr,length);
for(i=0;i<length;i++)
printf("%d ",arr[i]);
system("pause");
return 0;
}