这个题看上去挺复杂(我认为)实际上并不复杂 其实只是一个元素交换问题
目的是把奇数放左边 偶数放右边 找到左边不是奇数的 右边不是偶数的 把他们进行交换即可
代码如下
#include<iostream>
using namespace std;
int main()
{
void sort_arr(int arr[],int size);
const int n = 10;
int arr[n] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
sort_arr(arr,sz);
cout << "排序后的结果为:" << endl;
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
return 0;
}
//奇数去左边 偶数去右边
void sort_arr(int arr[],int size)
{
int left = 0;
int right = size - 1;
while (left<right)
{
while (arr[left]%2==1) //若左边的数是奇数
{
left++;
}
while (arr[right]%2==0) //若右边的数是偶数
{
right--;
}
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
}
这里有一个值得注意的点 当求数组元素个数时 可以看到是用数组总大小/单个元素的大小的
这个过程不可以放在函数里 这样求出来的数组元素个数是不正确的 具体原因
恩... 我想想 主函数内调用函数时 函数实参是arr数组 而形参写的也是 int arr[] 这里传递的实际上是首元素地址 那么如果在函数里用到sizeof(arr)可能就不对了吧 .. 我并不是很确定 反正求数组元素个数的过程不能放在函数内 应该加一个函数参数 用来储存数组元素个数
剩下的就没什么注意的了 注意里面用的是while 并不是if 因为不能保证一次left++就能找到那个偶数 额 可能这些点对于技术成熟的人来说并不是值得注意的 哎 说到这里有一丝丝悲伤了 就这吧
本文解析了一段简单的奇偶数分离并交换代码,探讨了如何在函数外部正确获取数组长度,以及为什么不能在函数内部使用sizeof。重点讲解了while循环的应用和数组操作技巧。

被折叠的 条评论
为什么被折叠?



