调整数组,使得奇数都位于偶数的前面(奇数都在左边,偶数都在右边)
思路:
1.定义两个指针,begin指向数组的头,end指向数组的尾
2.判断情况:
1)begin指向的是偶数,end指向的是奇数——a[begin]和a[end]交换
2)begin指向奇数,直接begin++
3)end指向偶数,直接end–
知识补充:如何判断一个数是奇数还是偶数呢?
代码分析:
#include<stdlib.h>
#include<stdio.h>
int a[] = { 1,2,3,4,5,6,7,8,9 };//定义成全局的,方便在调试的时候,测试窗口可以直接查看
void Swap(int*x, int*y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
void JO_Switch(int a[], int len)
{
int begin = 0;
int end = len - 1;
while(begin < end)
{
if (!(a[begin] & 1) && (a[end] & 1))
{
Swap(a+begin,a + end);
begin++;
end--;
continue;
}
else if (a[begin] & 1)
{
begin++;
}
else if (!(a[end] & 1))
{
end--;
}
}
}
static void Show(int a[], int len)
{
for (int i = 0; i < len;i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
int main()
{
int len = sizeof(a) / sizeof(a[0]);
Show(a, len);
JO_Switch(a, len);
Show(a, len);
system("pause");
return 0;
}
打印结果: