调整数组使奇数全部都位于偶数前面
题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
分析思路:把一组数分为左半部分和右半部分,把左半部分找到的偶数和右边找到的奇数位置对调,直至左边没有偶奇数,右边没有奇数
具体代码如下:
#include <stdio.h>
#include <stdlib.h>
void MoveNum(int arr[],int sz)
{
int *left = arr;
int *right = arr+sz - 1;
while (left < right)
{
while ((left<right) && (*left) % 2 != 0)//注意,这里不止判断一次,所以要用while循环
{
left++;
}
while((left<right) && (*right) % 2 == 0)//注意,这里不止判断一次,所以要用while循环
{
right--;
}
if (left < right)//交换位置
{
int tmp = *left;
*left= *right;
*right = tmp;
}
}
}
int main()
{
int arr[10 ]={ 2, 4, 6, 7, 8, 1, 3, 5, 9, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
MoveNum(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)//打印移动后的数组
{
printf("%d\n", arr[i]);
}
system("pause");
return 0;
}