Reorganizar array en números negativos, cero y luego en orden de números positivos

Dado un arr[ ] de tamaño N , que contiene enteros positivos, negativos y un cero. La tarea es reorganizar la array de tal manera que todos los números negativos estén a la izquierda del 0 y todos los números positivos estén a la derecha. 

Nota: No es obligatorio mantener el orden de los números. Si hay múltiples respuestas posibles, imprima cualquiera de ellas.

Ejemplos:

Entrada: arr[] = {1, 0, -2, 3, 4, -5, -7, 9, -3}
Salida: -2 -3 -5 -7 0 1 9 3 4 
Explicación: Los números negativos son -2, -5, -7 y -3.

Entrada: arr[] = {-10, 5, -2, 0, -4, 5, 17, -9, -13, 11}
Salida: -10 -2 -4 -13 -9 0 17 5 5 11  

 

Enfoque ingenuo: cree una array de tamaño N y empuje números negativos desde el principio y números positivos desde el final. Además, llene el único lugar restante con 0.

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

Enfoque eficiente: la idea es encontrar el índice donde se almacena 0 en la array. Una vez que se encuentra el 0, considere ese índice como un pivote. Mueva todos los valores negativos al lado izquierdo del pivote y así los valores del lado derecho serán positivos automáticamente.

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

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to rearrange the array,
// such that all the negative appear
// on the left side of 0 and all
// positive appear on the right side of 0
void rearrangeArray(int arr[], int N)
{
    int i, ind;
 
    // Find index of 0
    for (i = 0; i < N; i++) {
        if (arr[i] == 0) {
            ind = i;
            break;
        }
    }
 
    // Pivot the 0 element.
    int j = -1, k, temp;
    for (k = 0; k < N; k++) {
        if (arr[k] < 0) {
            j += 1;
 
            // Don't swap with pivot.
            if (arr[j] == 0)
                j += 1;
 
            swap(arr[j], arr[k]);
        }
    }
    // swap the pivot with last negative.
    swap(arr[ind], arr[j]);
 
    for (int i = 0; i < N; i++) {
        cout << arr[i] << " ";
    }
}
 
// Driver Code
int main()
{
    int arr[] = { 1, 0, -2, 3, 4, -5,
                  -7, 9, -3 };
    int N = sizeof(arr) / sizeof(int);
 
    rearrangeArray(arr, N);
    return 0;
}

Java

// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG {
 
  // Function to rearrange the array,
  // such that all the negative appear
  // on the left side of 0 and all
  // positive appear on the right side of 0
  static void rearrangeArray(int arr[], int N)
  {
    int i, ind = -1;
 
    // Find index of 0
    for (i = 0; i < N; i++) {
      if (arr[i] == 0) {
        ind = i;
        break;
      }
    }
 
    // Pivot the 0 element.
    int j = -1, k, temp;
    for (k = 0; k < N; k++) {
      if (arr[k] < 0) {
        j += 1;
 
        // Don't swap with pivot.
        if (arr[j] == 0)
          j += 1;
 
        //swap
        temp = arr[j];
        arr[j] = arr[k];
        arr[k] = temp;
      }
    }
     
    // swap the pivot with last negative.
    int temp2 = arr[j];
    arr[j] = arr[ind];
    arr[ind] = temp2;
 
    for (j = 0; j < N; j++) {
      System.out.print(arr[j] + " ");
    }
  }
 
  // Driver Code
  public static void main (String[] args) {
    int arr[] = { 1, 0, -2, 3, 4, -5,
                 -7, 9, -3 };
    int N = arr.length;
 
    rearrangeArray(arr, N);
  }
}
 
// This code is contributed by hrithikgarg03188

Python3

# Python code for the above approach
 
# Function to rearrange the array,
# such that all the negative appear
# on the left side of 0 and all
# positive appear on the right side of 0
def rearrangeArray(arr, N):
    ind = None
 
    # Find index of 0
    for i in range(N):
        if (arr[i] == 0):
            ind = i;
            break;
 
    # Pivot the 0 element.
    j = -1
    temp = None
    for k in range(N):
        if (arr[k] < 0):
            j += 1;
 
            # Don't swap with pivot.
            if (arr[j] == 0):
                j += 1;
 
            temp = arr[j];
            arr[j] = arr[k];
            arr[k] = temp;
         
    # swap the pivot with last negative.
    temp = arr[ind];
    arr[ind] = arr[j];
    arr[j] = temp;
 
    for i in range(N):
        print(arr[i], end=" ");
 
# Driver Code
arr = [1, 0, -2, 3, 4, -5, -7, 9, -3];
N = len(arr)
 
rearrangeArray(arr, N);
 
# This code is contributed by Saurabh Jaiswal

C#

// C# program for the above approach
using System;
 
class GFG
{
 
  // Function to rearrange the array,
  // such that all the negative appear
  // on the left side of 0 and all
  // positive appear on the right side of 0
  static void rearrangeArray(int[] arr, int N)
  {
    int i, ind = -1;
 
    // Find index of 0
    for (i = 0; i < N; i++)
    {
      if (arr[i] == 0)
      {
        ind = i;
        break;
      }
    }
 
    // Pivot the 0 element.
    int j = -1, k, temp;
    for (k = 0; k < N; k++)
    {
      if (arr[k] < 0)
      {
        j += 1;
 
        // Don't swap with pivot.
        if (arr[j] == 0)
          j += 1;
 
        //swap
        temp = arr[j];
        arr[j] = arr[k];
        arr[k] = temp;
      }
    }
 
    // swap the pivot with last negative.
    int temp2 = arr[j];
    arr[j] = arr[ind];
    arr[ind] = temp2;
 
    for (j = 0; j < N; j++)
    {
      Console.Write(arr[j] + " ");
    }
  }
 
  // Driver Code
  public static void Main()
  {
    int[] arr = { 1, 0, -2, 3, 4, -5, -7, 9, -3 };
    int N = arr.Length;
 
    rearrangeArray(arr, N);
  }
}
 
// This code is contributed by gfgking

Javascript

<script>
      // JavaScript code for the above approach
 
      // Function to rearrange the array,
      // such that all the negative appear
      // on the left side of 0 and all
      // positive appear on the right side of 0
      function rearrangeArray(arr, N) {
          let i, ind;
 
          // Find index of 0
          for (i = 0; i < N; i++) {
              if (arr[i] == 0) {
                  ind = i;
                  break;
              }
          }
 
          // Pivot the 0 element.
          let j = -1, k, temp;
          for (k = 0; k < N; k++) {
              if (arr[k] < 0) {
                  j += 1;
 
                  // Don't swap with pivot.
                  if (arr[j] == 0)
                      j += 1;
 
                  let temp = arr[j];
                  arr[j] = arr[k];
                  arr[k] = temp;
              }
          }
          // swap the pivot with last negative.
          temp = arr[ind];
          arr[ind] = arr[j];
          arr[j] = temp;
 
          for (let i = 0; i < N; i++) {
              document.write(arr[i] + " ");
          }
      }
 
      // Driver Code
      let arr = [1, 0, -2, 3, 4, -5,
          -7, 9, -3];
      let N = arr.length;
 
      rearrangeArray(arr, N);
 
     // This code is contributed by Potta Lokesh
  </script>
Producción

-2 -3 -5 -7 0 1 3 9 4 

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

Publicación traducida automáticamente

Artículo escrito por pintusaini 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 *