要求:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思想:定义两个指针变量:start和end,分别指向数组的头和尾。如果*start是偶数,并且 *end是奇数,那就把它两进行交换,交换完了后start++,end- -。如果 *start不是偶数那start++,同理如果 *end不是奇数,end- -。
代码实现:
void classify_odd_even(int arr[], int size)
{
int *start = arr;
int *end = &arr[size - 1];
while (start < end)
{
if (((*start) & 1) == 0) //判断数组第一个元素是不是偶数
{
while (1)
{
if (((*end) & 1) == 1) //判断数组末尾元素是不是奇数
{
int tem = *end; //把偶数和技术交换
*end = *start;
*start = tem;
start++;
end--;
break;
}
else // *end不是奇数是偶数
{
end--;
}
}
}
else // *start不是偶数是奇数
{
start++;
}
}
}
int main()
{
int arr[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
int sz = sizeof(arr) / sizeof(arr[0]);
classify_odd_even(arr,sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}