作业标题
调整奇数偶数顺序
作业内容
调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
2.解题思路
3.具体代码
void Movenum(int a[], int sz)
{
int* left = a;
int* right = a + sz - 1;
while (left < right)
{
while (((left < right) && (*left) % 2 != 0))// 从 left 指针开始,向右移动,直到找到一个偶数
{
left++;// 移动到下一个元素
}
while (((left < right) && (*right) % 2 == 0))// 从 right 指针开始,向左移动,直到找到一个奇数
{
right--;// 移动到前一个元素
}
if (left < right)//交换left和right指针所指向的元素。
{//这一步就相当于把第一个奇数和偶数换位置,奇数放前面,偶数放后面。
int tmp = *left;
*left = *right;
*right = tmp;
}
}
}
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
scanf("%d", &a);
int i = 0;
int sz = (sizeof(a) / sizeof(a[0]));
Movenum(a, sz);
for (i = 0; i < sz; i++)
{
printf("%d ", a[i]);
}
system("pause"); // 在 Windows 系统上,system("pause") 用于暂停程序直到用户按下任意键
return 0;
}
打印:
代码讲解:
-
进入main函数,先定义一个数组来存放元素。
-
通过输入改变数组内元素。
-
定义整型变量i,定义整型变量sz来存放数组a的元素个数。
-
Movenum(a, sz);
将数组a首元素地址和数组a的元素个数传递给了Movenum
函数。 -
进入
Movenum
函数,初始化两个指针left
和right
。left
指向数组的开始,而right
指向数组的最后一个元素。 -
使用两个嵌套的 while 循环来移动元素。外层循环确保
left
指针始终在right
指针的左侧。 -
内层循环分别处理
left
和right
指针。第一个内层循环将
left
指针向右移动,直到它指向一个偶数或者与right
指针相遇。第二个内层循环将
right
指针向左移动,直到它指向一个奇数或者与left
指针相遇。 -
如果
left
指针在right
指针的左侧,交换left
和right
指针所指向的元素。这一步就相当于把第一个奇数和偶数换位置,奇数放前面,偶数放后面。
-
返回主函数,打印a数组元素。
-
system("pause");
在 Windows 系统上,system(“pause”) 用于暂停程序直到用户按下任意键。