题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,偶数位于后半部分。
思路:这个题目要求把奇数放在数组的前半部分,偶数放在数组的后半部分,因此数组中所有奇数位于偶数前面。我们在扫描这个数组时,遇到偶数在奇数前面时可以交换一下它们的顺序。因此我们可以定义两个指针pBengin、pEnd,pBegin指向数组的首地址,pEnd指向数组的最后一位,当pBengin指向的数字为奇数时,pbengin向后移动,当指向的数字为偶数时,先不动。当pEnd指向的数字为偶数时不动,奇数时向前移动。在没有相遇之前奇数总数位于偶数前面,如果第一个指向的位偶数第二个指向的为奇数,可以交换这两个数字。
代码:
#include<iostream>
using namespace std;
void ReorderOddEven(int *arr,int length)
{
if(arr==NULL|| length==NULL)
return;
int *pBegin=arr;
int *pEnd=arr+length-1;
while(pBegin<pEnd)
{
while(pBegin<pEnd && (*pBegin%2)!=0)//向后移动直到它指向偶数
pBegin++;
while(pBegin<pEnd && (*pEnd%2)==0)//向前移动直到它指向奇数
pEnd--;
if(pBegin<pEnd)
{
int tmp=*pBegin;
*pBegin=*pEnd;
*pEnd=tmp;
}
}
}
int main()
{
int arr[]={1,2,3,4,5,6,7};
int sz=sizeof(arr)/sizeof(arr[0]);
ReorderOddEven(arr,sz);
for(int i=0;i<sz;i++)
{
cout<<arr[i]<<' ';
}
return 0;
}
转载于:https://blog.51cto.com/12951882/2055916