📅  最后修改于: 2023-12-03 14:59:37.323000             🧑  作者: Mango
这是一个C++程序,它将给定数组中的所有奇数向右旋转,并将所有偶数向左旋转。下面是程序的代码片段:
#include <iostream>
#include <vector>
void rotateArray(std::vector<int>& arr) {
int n = arr.size();
int left = 0, right = n - 1;
while (left < right) {
// 找到第一个偶数
while (arr[left] % 2 != 0 && left < right) {
left++;
}
// 找到第一个奇数
while (arr[right] % 2 == 0 && left < right) {
right--;
}
// 交换偶数和奇数
if (left < right) {
std::swap(arr[left], arr[right]);
}
}
}
int main() {
std::vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::cout << "原始数组:";
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
rotateArray(arr);
std::cout << "旋转后的数组:";
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
这个程序使用了一个自定义的函数rotateArray
来实现对数组的旋转操作。它接受一个std::vector<int>
类型的数组作为参数,通过引用来修改原始数组。
在rotateArray
函数中,使用了双指针的方法。左指针left
从数组的起始位置开始,右指针right
从数组的末尾位置开始。程序通过循环找到第一个偶数和第一个奇数的位置,并交换它们。然后,左指针向右移动,右指针向左移动,继续找到下一对偶数和奇数,直到两个指针相遇为止。
在main
函数中,定义了一个初始数组arr
,包含了数字1到10。然后,程序将原始数组输出到控制台,并调用rotateArray
函数对数组进行旋转。最后,再次输出旋转后的数组。
以下是程序运行的输出结果:
原始数组:1 2 3 4 5 6 7 8 9 10
旋转后的数组:2 4 6 8 10 1 3 5 7 9
上述输出表明,奇数向右旋转,偶数向左旋转的操作已成功应用于给定的数组。