题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。
思路:
先定义两个pStart、pEnd两个指针,一个放在数组首部,一个放在数组尾部, pStart指针向左移动,pEnd指针向右移动,如果第一个指针指向的偶数,第二个指针指向的是奇数,则交换这两个数字。
图解:
具体代码实现如下:
# include <stdio.h>
# include <stdlib.h>
# include <assert.h>
void MoveArr( int *parr,int len)
{
if(parr==NULL||len<0)
{
return ;
}
int *pStart=parr; //定义头指针
int *pEnd=parr+len-1; //定义尾指针
while(pStart<pEnd)
{
while(pStart<pEnd && (*pStart & 0x1)!=0) //向后移动头指针,直到指向偶数
{
pStart++;
}
while(pStart<pEnd && (*pEnd & 0x1)==0) //向前移动尾指针,直到指向奇数
{
pEnd--;
}
if(pStart<pEnd)
{
int tmp=*pStart;
*pStart=*pEnd;
*pEnd=tmp; //交换两个数的值
}
}
}
void Show(int arr[],int len)
{
for(int i=0;i<len;i++)
{
printf("%3d",arr[i]);
}
printf("\n");
}
int main()
{
int arr[]={1,2,3,4,5};
int len=sizeof(arr)/sizeof(arr[0]);
MoveArr(arr,len);
Show(arr,len);
return 0;
}
测试结果: