分离偶数和奇数


难度级别 易得奖学金
经常问 ol石 LinkedIn MakeMyTrip Paytm
排列 排序

问题陈述

假设您有一个 整数 排列。 问题“分隔偶数和奇数”要求重新排列数组,以便可以将奇数和偶数分隔为数组的两个部分。 偶数移到数组的左侧,奇数移到数组的右侧,

使用案列

arr[]={ 2,4,5,1,7,8,9,7}
2 4 8 1 7 5 9 7

说明:所有偶数元素都放在奇数元素Thay之前,它们也遵循与给定输入中相同的顺序。

分离偶数和奇数的算法

1. Set i = -1, j = 0.
2. While j is not equal to n(where n is the length of the array),
    1. Check if arr[j] is even or odd if it is even
        1. Do i++, and swap the values of arr[i] and arr[j] respectively.
    2. Increase the value of j by 1.
3. Print the array.

说明

我们给出了一个整数数组。 我们被要求将数组分为两部分。 一个部分是偶数,另一部分是奇数。 我们应该在给定的数组中执行此操作。 这样,偶数应移到数组的左侧。 并且奇数应移到数组的右侧。 为此,我们将检查每个数组元素。 如果是否为偶数,如果为偶数,则将其拉到数组的左侧。 用偶数执行此操作后。 所有奇数将自动进入数组的右侧。

然后,我们将遍历该数组,并为单个数组获取两个索引值。 一种用于常规遍历,另一种用于偶数索引。 我们将使用j的值遍历数组。 并检查任何数字是否为偶数意味着arr [j]是否为偶数。 然后,我们将其与arr [i]交换。 仅在发现array [j]的值为偶数时才增加i。 这样,即使我们没有找到偶数值,我们也将继续增加j的值。 然后,如果我们找到偶数。 然后,我们将arr [j]与应该是奇数的arr [i]交换。

仅在找到偶数时才在数组内交换它。 当然,它会被替换为奇数或自身。 完成所有这些操作后,我们将打印结果数组。

分离偶数和奇数

代码

C ++代码分隔偶数和奇数

#include<iostream>

using namespace std;

void getArrangedEvenOdd(int arr[], int n)
{

    int i = -1, j = 0;
    while (j != n)
    {
        if (arr[j] % 2 == 0)
        {
            i++;
            swap(arr[i], arr[j]);
        }
        j++;
    }
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}

int main()
{
    int arr[] = { 2,4,5,1,7,8,9,7};
    int n = sizeof(arr) / sizeof(int);
    getArrangedEvenOdd(arr, n);
    return 0;
}
2 4 8 1 7 5 9 7

Java代码分隔偶数和奇数

public class rearrangeEvenOdd
{
    public static void getArrangedEvenOdd( int arr[], int n)
    {

        int i = -1, j = 0;
        while (j != n)
        {
            if (arr[j] % 2 == 0)
            {
                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            j++;
        }
        for (int k = 0; k < n; k++)
            System.out.print(arr[k] + " ");
    }
    public static void main(String args[])
    {
        int arr[] = { 2,4,5,1,7,8,9,7};
        int n = arr.length;
        getArrangedEvenOdd (arr, n);
    }
}
2 4 8 1 7 5 9 7

复杂度分析

时间复杂度

O(N) 哪里 “ n” 是数组中元素的数量。 在这里,我们遍历了数组直到索引j不等于N。这意味着我们仅遍历了一次数组。 从而线性时间复杂度。

空间复杂度

O(1) 因为不需要额外的空间。 该算法本身仅占用恒定空间,而整个程序则占用线性空间。