C++程序 旋转所有奇数到右侧和所有偶数到左侧

C++程序 旋转所有奇数到右侧和所有偶数到左侧

给定由 N 个在 [1,N] 范围内的数组 A[] 组成的排列数组,任务是左旋转排列的所有偶数并右旋转所有奇数,并打印更新后的排列。

注意: N总是偶数。

示例:

输入: A = {1, 2, 3, 4, 5, 6, 7, 8}

输出: {7, 4, 1, 6, 3, 8, 5, 2}

解释:

偶数元素 = {2, 4, 6, 8}

奇数元素= {1, 3, 5, 7}

偶数左旋 = {4, 6, 8, 2}

奇数右旋 = {7, 1, 3, 5}

将奇数和偶数数值按顺序合并在一起.

输入: A = {1, 2, 3, 4, 5, 6}

输出: {5, 4, 1, 6, 3, 2}

方法:

  1. 显然,奇数元素总是在偶数索引上,偶数元素总是在奇数索引上.
  2. 要将偶数左旋,我们只选择奇数索引.
  3. 要将奇数右旋,我们只选择偶数索引.
  4. 打印更新的数组.

以下是上述方法的实施:

//C++程序实现
#include<bits/stdc++.h>
using namespace std;

//函数进行左旋转
void left_rotate(int arr[])
{
    int last = arr[1];
    for (int i = 3; i < 6; i = i + 2) 
    {
        arr[i - 2] = arr[i];
    }
    arr[6 - 1] = last;
}

//函数进行右旋转
void right_rotate(int arr[])
{
    int start = arr[6 - 2];
    for (int i = 6- 4; i >= 0; i = i - 2) 
    {
        arr[i + 2] = arr[i];
    }
    arr[0] = start;
}

//函数旋转数组
void rotate(int arr[])
{
    left_rotate(arr);
    right_rotate(arr);
    for (int i = 0; i < 6; i++) 
    {
        cout << (arr[i]) << " ";
    }
}

//驱动程序
int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6 };
    rotate(arr);
}

//本代码由rock_cool贡献

输出:

5 4 1 6 3 2

时间复杂度: O(N)

辅助空间: O(1)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例