La transición y el juego con números es uno de los aspectos más fascinantes de la compilación de estructuras de datos de matriz. En ese sentido, ¿sabía que las matrices se pueden usar para almacenar infinitos números naturales y dígitos que se han descubierto hasta la fecha?

Uno de esos componentes numéricos que vamos a discutir en este blog son los números enteros. Los números enteros son números que pueden ser positivos, negativos e incluso cero.

En este problema de matriz, vamos a discutir cómo mover todos los elementos negativos al final o al principio de una matriz mediante enfoques y algoritmos simples.

Tenga en cuenta que el orden de los elementos no es relevante para este problema. Solo estamos considerando los elementos negativos y colocándolos al principio o al final de la lista.

¿Cuáles son los métodos para mover todos los elementos negativos a un lado de una matriz?

Los arreglos en programación son una de las estructuras de datos más versátiles. Esto se debe al hecho de que, desde números hasta enteros, las matrices también facilitan el almacenamiento de infinitos enteros positivos, negativos e incluso de valor cero. Además, estos elementos dentro de la matriz pueden almacenarse en posiciones aleatorias independientemente de su secuencia general.

Existen muchos algoritmos y métodos para ayudar a clasificar y mover estos elementos dentro de las matrices. Por lo tanto, podemos decir que esta es una forma de clasificación que se realiza en la matriz según los requisitos del programa.

Este problema se plantea con frecuencia en las entrevistas de programación. En la siguiente sección del blog, analizaremos estos enfoques para mover todos los elementos negativos al final de una matriz.

Cómo mover todos los elementos a un lado en una matriz usando C?

Para aprender a mover todos los elementos negativos al final de una matriz, consideraremos este problema con la ayuda de un ejemplo. Aquí tenemos una matriz de entrada que consta de enteros negativos y positivos.

Discutamos los enfoques y métodos para mover los elementos negativos hacia un lado de la matriz más adelante en esta sección.

Input Array

1-2 3-1 8 9

Matriz de salida

1 9 3 8-2-1

Como podemos ver en la salida de la matriz, los elementos negativos tienen han sido arreglados al final de la secuencia.

Tenga en cuenta que la disposición de estos elementos no tiene que estar en un orden perfecto. Se pueden alinear en un orden aleatorio siempre que movamos todos los elementos negativos para terminar dentro del programa.

Ahora, analicemos los diferentes enfoques que se pueden aplicar para cambiar todos los elementos negativos al final de la matriz.

Método 1: Usar el enfoque ingenuo

Comenzaremos intentando resolver este problema usando el enfoque ingenuo. Este método también se conoce comúnmente como el algoritmo recursivo que se usa para resolver varios otros problemas de programación, así como para realizar un recorrido en zigzag del árbol binario.

En el contexto de mover todos los elementos negativos al final de una matriz, podemos Comience ordenando la matriz dada en orden descendente. De esta manera, todos los elementos negativos se apilarán al final de la matriz. Para lograr esto, podemos implementar la función de clasificación de selección, es decir, clasificación de selección (int arr[], int n) esta función, para cada uno de los i-ésimos elementos dentro de la matriz, intentaremos averiguar el elemento mínimo dentro de la subarreglo de i+1 e intentaremos intercambiar sus valores para ordenar la matriz al final

Complejidad de tiempo para este enfoque:

O(n*log(n))

Método 2: Uso del enfoque de partición

Ahora nos estamos moviendo hacia un enfoque más eficiente t y enfoques convenientes. Para este método, usaremos los bucles anidados para realizar solo un recorrido a través de todo el arreglo.

Un método simple para usar el enfoque de partición es implementar el bucle anidado para toda la longitud del arreglo. y este ciclo nos ayudará a detectar los enteros negativos que deben moverse al final.

Así es como se puede implementar este enfoque:

Puede comenzar declarando una variable como j=0 al comienzo de la matriz para arr[j] A continuación, iteraremos a través de todos los datos usando el puntero i del ciclo. Ahora, en cada paso de la iteración, mantendremos una pestaña del hecho de si arr[i ] es negativo o no. Si se determina que es cierto, simplemente intercambiaremos el elemento con arr[j] y lo colocaremos al comienzo de nuestra matriz de entrada. Finalmente, puede incrementar el elemento j y su valor y continuar con este proceso. para los elementos restantes de la matriz

Complejidad de tiempo para este enfoque:

O(n) 

Aquí hemos considerado”n”para sea ​​la longitud de nuestra matriz de entrada

Método 3: usar la técnica de variables o punteros

Como ya habrás adivinado, para mover todos los elementos negativos al final, como tercer enfoque, inicializaremos dos variables o punteros”m”y”n”en las posiciones inicial y final de la matriz de entrada.

Al usar esta técnica, mantendremos un realizar un seguimiento de todos los elementos dentro de la matriz e incrementar consecutivamente el puntero m y disminuir el puntero n.

Así es como funcionaría el algoritmo para este enfoque:

Si los punteros m y n apuntan apuntando a elementos negativos, luego incremente el valor del elemento a m Si el valor del puntero m tiene un número positivo y el puntero n tiene un número negativo, entonces intercambie ambos valores En caso de que ambos punteros indiquen un número entero positivo, entonces decrementa el puntero n Y finalmente, si m apunta hacia un elemento negativo mientras que n apunta a un elemento positivo, entonces incrementa m y decrementa n Reflexiones finales 

Existe una amplia gama de problemas basados ​​en matrices que se pueden resolver con punteros y el enfoque ingenuo, como realizar recorrido en zigzag del árbol binario.

Estos enfoques ofrecen su propio conjunto de clases y funciones que se pueden usar de manera eficaz para reducir la complejidad temporal del problema.

By Maisy Hall

Trabajo como escritora independiente. También soy vegana y ecologista. Siempre que tengo tiempo, me centro en la meditación.