题目概述
解决思路
用两个指针left和right,分别从数组的两端向中间进行遍历
如果left找到了一个偶数,right找到一个奇数
然后互换
直到left和right相等
代码实现
#include<iostream>
using namespace std;
#include<assert.h>
//判断一个数是否为偶数
bool IsEven(int num)
{
if (num % 2 == 0)
return true;
return false;
}
//交换
void ReOrder(int* arr, size_t length)
{
int left = 0;
int right = length - 1;
while (left < right)
{
while (left < right && IsEven(arr[left]))
left++;
while (left < right && !IsEven(arr[right]))
right--;
std::swap(arr[left], arr[right]);
left++;
right--;
}
}
//打印
void PrintArr(int* arr, size_t length)
{
assert(arr);
for (size_t i = 0; i < length; ++i)
cout << arr[i] << " ";
cout << endl;
}
测试函数
void TestReOrder()
{
int arr[5] = { 1, 2, 3, 4, 5 };
ReOrder(arr, sizeof(arr) / sizeof(arr[0]));
PrintArr(arr, sizeof(arr) / sizeof(arr[0]));
}
转载请注明原文地址: https://ju.6miu.com/read-47.html