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

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

在编程中,经常需要对数组进行排序和操作。在某些情况下,需要将数组中的奇数放在数组的右侧,将数组的偶数放在数组的左侧。本文将介绍如何使用C++编程实现这个功能。

问题描述

假设有一个数组如下:

int a[] = { 5, 2, 7, 4, 6, 8, 9, 1, 3 };

现在要把所有的奇数移到数组右侧,所有偶数移到数组的左侧,并保持相对位置不变,最终数组变为:

int a[] = { 3, 1, 5, 7, 9, 8, 6, 4, 2 };

解决方法

方法一:创建新数组

我们可以使用一个新数组来保存排序后的结果,代码示例如下:

#include <iostream>
using namespace std;
int main()
{
    int a[] = { 5, 2, 7, 4, 6, 8, 9, 1, 3 };
    int n = sizeof(a) / sizeof(a[0]);
    int b[n], j = 0;
    for (int i = 0; i < n; i++) {
        if(a[i] % 2 == 0) {
            b[j++] = a[i];
        }
    }
    for (int i = 0; i < n; i++) {
        if(a[i] % 2 == 1) {
            b[j++] = a[i];
        }
    }
    for (int i = 0; i < n; i++) {
        cout << b[i] << " ";
    }
    return 0;
}

在这个示例中,我们遍历了原始数组,如果当前元素是偶数,我们将其放入新数组的前面,如果当前元素是奇数,我们将其放入新数组的后面。最终,我们输出了新数组的所有元素。

方法二:使用双指针

我们也可以使用双指针来实现,一个指针从数组左侧开始,一个指针从数组右侧开始。当指针相遇时,操作结束。代码示例如下:

#include <iostream>
using namespace std;
int main()
{
    int a[] = { 5, 2, 7, 4, 6, 8, 9, 1, 3 };
    int n = sizeof(a) / sizeof(a[0]);
    int i = 0, j = n - 1;
    while (i < j) {
        while (a[i] % 2 == 0 && i < j) {
            i++;
        }
        while (a[j] % 2 == 1 && i < j) {
            j--;
        }
        if (i < j) {
            swap(a[i], a[j]);
            i++;
            j--;
        }
    }
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    return 0;
}

在这个示例中,我们使用两个指针i和j来遍历数组,当i指向一个偶数,j指向一个奇数时,我们交换i和j所指向的元素。最终,我们遍历整个数组,输出所有元素。

方法三:冒泡排序

我们还可以使用冒泡排序来实现这个功能。冒泡排序的基本思路是对任意一对相邻的元素进行比较并交换,重复这一过程,直到没有任何一对数需要比较为止。代码示例如下:

#include <iostream>
using namespace std;
int main()
{
    int a[] = { 5, 2, 7, 4, 6, 8, 9, 1, 3 };
    int n = sizeof(a) / sizeof(a[0]);
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (a[j] % 2 == 0 && a[j+1] % 2 == 1) {
                swap(a[j], a[j+1]);
            }
        }
    }
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    return 0;
}

在这个示例中,我们使用两重循环,外层循环控制比较轮数,内层循环控制每轮比较的次数。对于每一对相邻的元素,我们判断它们是奇数还是偶数,并进行交换。最终,我们遍历整个数组,输出所有元素。

结论

本文介绍了三种方法来实现C++程序旋转所有奇数到右侧和所有偶数到左侧。这三种方法分别是创建新数组、使用双指针和冒泡排序。对于不同的情况,我们可以使用不同的方法来实现相同的功能。我们需要选择最适合当前情况的方法,以获得最好的性能和可读性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例