题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于奇数前面。
分析:两个指针,一个指针从开头扫描,直到遇到奇数,一个指针从尾部扫描,直到遇到偶数,奇数偶数交换,直到两个指针相遇。
#include <stdio.h>
void tiaozheng(int a[], int len)
{
if(a==NULL || len<=0)
return;
int begin = 0;
int end = len-1;
int temp;
while(begin < end)
{
while(begin<end && (a[end]&0x1)==1)//从最后开始扫描,直到遇到偶数
end--; //注意&优先级小于==,所以要加括号
while(begin<end && (a[begin]&0x1)==0)//从最开始扫描,直到遇到奇数
begin++;
if(begin<end)//奇数偶数交换
{
temp = a[begin];
a[begin] = a[end];
a[end] = temp;
}
}
}
int main()
{
int a[] = {1,2,3,4,5};
int len = sizeof(a)/sizeof(int);
int i;
printf("调整前数组:\n");
for(i=0;i<len;i++)
printf("%d\t",a[i]);
printf("\n");
tiaozheng(a,len);
printf("调整后数组:\n");
for(i=0;i<len;i++)
printf("%d\t",a[i]);
printf("\n");
return 0;
}