面试题14:调整数组顺序使奇数位位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数组中数字的顺序,使得使得所有奇数位于数组的前半部分,所有偶像位于数组的后半部分。
其实这道题并不难,只要是在编程的时候注意效率就可以啦。
首先看图:
思路:
-
首先定义两个指针,一个指向数组开始,一个指向数组结束。
-
然后如果满足条件就交换。
-
不满足就进行指针的加减。
代码如下:
#include<stdio.h>
void Reorder(int *arr,int len)
{
int p1=0;
int p2=len-1;
while(p1 != p2)
{
if(arr[p1]%2 == 1 && arr[p2]%2 ==1)
{
p1++;
if(p2-p1 == 1)
{
break;
}
}
else if(arr[p1]%2 == 0 && arr[p2]%2 == 1)
{
int tmp=arr[p1];
arr[p1]=arr[p2];
arr[p2]=tmp;
p1++;
p2--;
if(p2-p1 == 1)
{
break;
}
}
else if(arr[p1]%2 == 0 && arr[p2]%2 == 0)
{
p2--;
if(p2-p1 == 1)
{
break;
}
}
else if(arr[p1]%2 == 1 && arr[p2]%2 == 0)
{
p1++;
p2--;
if(p2-p1 == 1)
{
break;
}
}
}
}
void Printf(int *arr,int len)
{
for(int i =0; i<len; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9};
Reorder(arr,9);
Printf(arr,9);
return 0;
}
执行结果如下: