前言
调整数组里的奇数偶数的顺序,使奇数全部都位于偶数前面。
1、不改变元素顺序
- 首先将奇数都调整到数组的前面
- 然后将偶数都调整到数组的后面
- 所有的奇数部分的前后顺序不变
- 所有的偶数部分的前后顺序不变
int main()
{
int a[] = { 1,2,8,9,4,10,3,5,6,0,7 };
int left = 0;
int sz = sizeof(a) / sizeof(a[0]);
int right = sz-1;
int tmp = 0;//临时中间变量
int num = sz;//判断次数
while (num)
{
if (a[left] % 2 == 0)//此时a[left]是偶数,则进行移位
{
//ou = i;//下一次判断的起始位置
tmp = a[left];
for (int j = left; j <= right - 1; j++)
{
a[j] = a[j + 1];
}
a[right] = tmp; //偶数放在数组末尾
}
else
{
left++;//a[left]不是偶数,则判断下一个a[left+1]
}
num--;
}
for (int i = 0; i < sz; i++)
{
printf("%d ", a[i]);
}
return 0;
}
结果见下图:
10
2、改变元素的顺序
- 首先将奇数都调整到数组的前面
- 然后将偶数都调整到数组的后面
- 所有的奇数部分的前后顺序有改变
- 所有的偶数部分的前后顺序有改变
void change(int a[], int sz)
{
int left = 0;
int right = sz - 1;
while (left<right)
{
while ((left<right) && (a[left] % 2 == 1))
{
left++;
}
while ((left < right) && (a[right] % 2 == 0))
{
right--;
}
if (left < right)
{
int tmp = a[left];
a[left] = a[right];
a[right] = tmp;
}
}
}
void print(int a[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", a[i]);
}
}
int main()
{
int a[] = { 1,2,8,9,4,10,3,5,6,0,7 };
int sz = sizeof(a) / sizeof(a[0]);
change(a, sz);
print(a, sz);
return 0;
}
结果见下图:
总结
还是需要多练习,不管自己写的代码是罗嗦了,还是太烂了,也必须要写完,实现题目要求,这是最重要的一步。
第二步就是多看看别人写的代码,学习别人的思路,记录下来写成博客,方便自己复习。