具体思路:定义两个指针变量*begin和*end在begin<end的前提下遍历整个数组,即设置两个循环,第一个while找偶数,如果是奇数的话begin++,找到偶数退出循环。再让第二个循环从end开始找奇数,同样不是奇数end--,是奇数退出循环。紧接着交换两个数。交换完成之后在++和--,判断begin<end。以此类推
程序代码如下:
#define CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void reverse(int *pdest,int *pstr)
{
*pdest ^= *pstr;
*pstr ^= *pdest;
*pdest ^= *pstr;
}
void swap(int *arr, int len)
{
int *begin = arr;
int *end = arr + len - 1;
//奇数在前,偶数在后
while (begin < end)
{
while((*begin % 2 != 0) && (begin < end))
{
begin++;
}
while ((*end % 2 == 0) && (begin < end))
{
end--;
} //注:两个循环都必须要添加begin<end,不然每次经过两次循环又会返回到原来序列
reverse(begin,end);
begin++;
end--;
}
int i = 0;
for (i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[] = { 1,3,5,7,9,0 };
int len = sizeof(arr) / sizeof(arr[0]);
swap(arr, len);
system("pause");
return 0;
}
效果截图: