#include<stdio.h>
void move_arr(int arr[], int sz) //移位函数需要两个参数
{
int left = 0;
int right = sz - 1;
///sizeof()计算的是字节长度,从一开始;但是数组下标是以开始,所以sizeof()计算的字节长度减一就是数组最后一位数字的下标。
while (left < right)//循环条件
{
while((left<right)&&arr[left] % 2 == 1)
//从最左侧开始寻找奇数
{
left++;
}
while((left<right)&&arr[right] % 2 == 0)
//从最右侧开始找偶数
{
right--;
}
if (left < right) //交换函数
{
int value = arr[left];
arr[left] = arr[right];
arr[right] = value;
left++;
right--;
}
}
}
int main()
{
int arr[10] = { 0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
//sizeof()计算字节长度
for (i = 0; i < sz; i++)
{
scanf_s("%d", &arr[i]);
//****数组内容的输入(scanf_s仅是vs的函数,其他编译器换成scanf即可)***
}
move_arr(arr,sz);//实现的函数
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);//打印
}
return 0;
}
纯享版:
#include<stdio.h>
move_arr(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left < right)
{
while ((left < right) && arr[left] % 2 == 1)
{
left++;
}
while ((left < right) && arr[right] % 2 == 0)
{
right--;
}
if (left < right)
{
int value = arr[left];
arr[left] = arr[right];
arr[right] = value;
left++;
right--;
}
}
}
int main()
{
int arr[10] = { 0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
scanf("%d", arr + i);
}
move_arr(arr, sz);
for (i = 0; i < sz; i++)
{
printf("%d", arr + i);
}
return 0;
}
祝大家新年快乐!