Segregar números pares e impares | conjunto 2 – Part 1

Dada una array arr[] de tamaño N , la tarea es segregar números pares e impares. Imprime primero todos los números pares y luego los impares.

Ejemplos: 

Entrada: arr[] = {8, 22, 65, 70, 33, 60, 2, 34, 43, 21} 
Salida: {8, 22, 70, 60, 2, 34, 65, 33, 43, 21} 

Entrada: arr[] = {18, 52, 37, 70, 3, 63, 2, 34} 
Salida: {18, 52, 70, 2, 34, 37, 3, 63} 

Enfoque lineal: este problema puede verse como una variación del problema de la bandera nacional holandesa . Consulte la publicación anterior para conocer todos los enfoques lineales para resolver el problema.

Complejidad temporal: O(N) 
Espacio auxiliar: O(1)

Enfoque usando la función stable_partition() : El algoritmo stable_partition() organiza la secuencia definida por el inicio y el final de tal manera que todos los elementos para los cuales el predicado, especificado por la función de predicado definida por el usuario, devuelve True , precede a aquellos para los que la función devuelve False . La partición es estable. Por lo tanto, se conserva el orden relativo de la secuencia.

Sintaxis: 

plantilla 
BiIter stable_partition(BiIter start, BiIter end, UnPred pfn) 

Parámetros:  

inicio: el rango de elementos para reordenar 
fin: el rango de elementos para reordenar 
pfn: Objeto de función de predicado definido por el usuario que define la condición que debe cumplirse si se va a clasificar un elemento. 
Un predicado toma un único argumento y devuelve True o False
Valor devuelto: Devuelve un iterador al principio de los elementos para los que el predicado es falso. 

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program to implement
// the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to segregate
// odd and even numbers
void segregate(vector<int> arr)
{
 
    // Using stable partition
    // with lambda expression
    stable_partition(arr.begin(),
                     arr.end(),
                     [](int a) {
                         return a % 2 == 0;
                     });
 
    // Print array after partition
    for (int num : arr)
        cout << num << " ";
}
 
// Driver Code
int main()
{
    // Given array arr[]
    vector<int> arr = { 18, 52, 37, 70,
                        3, 63, 2, 34 };
 
    // Function Call
    segregate(arr);
 
    return 0;
}

Java

// Java program to implement
// the above approach
import java.util.*;
class GFG{
   
static int[] stable_partition(int arr[])
{
  // Initialize left and
  // right indexes
  int left = 0,
      right = arr.length - 1;
   
  while (left < right)
  {
    // Increment left index while
    // we see 0 at left
    while (arr[left] % 2 == 0 &&
           left < right)
      left++;
 
    // Decrement right index while
    // we see 1 at right
    while (arr[right] % 2 == 1 &&
           left < right)
      right--;
 
    if (left < right)
    {
      // Swap arr[left] and
      // arr[right]
      int temp = arr[left];
      arr[left] = arr[right];
      arr[right] = temp;
      left++;
      right--;
    }
  }
  return arr;
}
 
// Function to segregate
// odd and even numbers
static void segregate(int[] arr)
{
  // Using stable partition
  // with lambda expression
  int []ans = stable_partition(arr);
 
  // Print array after partition
  for (int num : ans)
    System.out.print(num + " ");
}
 
// Driver Code
public static void main(String[] args)
{
  // Given array arr[]
  int[] arr = {18, 52, 37, 70,
               3, 63, 2, 34};
 
  // Function Call
  segregate(arr);
}
}
 
// This code is contributed by 29AjayKumar

Python3

# Python3 program to implement
# the above approach
 
# Function to segregate
# odd and even numbers
def segregate(arr):
     
    # Using stable partition
    # with lambda expression
    odd = []
    even = []
     
    for x in arr:
        if (x % 2 == 0):
            even.append(x)
        else:
            odd.append(x)
             
    for x in even:
        print(x, end = " ")
    for x in odd:
        print(x, end = " ")
 
# Driver Code
if __name__ == '__main__':
     
    # Given array arr[]
    arr = [ 18, 52, 37, 70, 3, 63, 2, 34 ]
 
    # Function Call
    segregate(arr)
 
# This code is contributed by SURENDRA_GANGWAR

C#

// C# program to implement
// the above approach
using System;
using System.Collections.Generic;
class GFG{
   
static void stable_partition(int []arr)
{
  // Initialize left and
  // right indexes
  List<int> odd = new List<int>();
  List<int> even = new List<int>();
 
  foreach(int i in arr)
  {
    if(i % 2 == 1)
      odd.Add(i);
    else
      even.Add(i);
  }
   
  foreach(int i in even)
    Console.Write(i +" ");
   
  foreach(int i in odd)
    Console.Write(i +" ");
}
 
// Function to segregate
// odd and even numbers
static void segregate(int[] arr)
{
  // Using stable partition
  // with lambda expression
  stable_partition(arr);
 
}
 
// Driver Code
public static void Main(String[] args)
{
  // Given array []arr
  int[] arr = {18, 52, 37, 70,
               3, 63, 2, 34};
 
  // Function Call
  segregate(arr);
}
}
 
// This code is contributed by 29AjayKumar
Producción

18 52 70 2 34 37 3 63 

Complejidad temporal: O(N) 
Espacio auxiliar: O(1) 

Publicación traducida automáticamente

Artículo escrito por chirags_30 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *