La transizione e il gioco con i numeri è uno degli aspetti più affascinanti della compilazione di strutture di dati di matrice. A tal proposito, sapevi che gli array possono essere utilizzati per memorizzare infiniti numeri naturali e cifre che sono stati scoperti fino ad oggi?
Uno di questi componenti numerici di cui parleremo in questo blog sono i numeri interi. Gli interi sono numeri che possono essere positivi, negativi e persino zero.
In questo problema di array, discuteremo come spostare tutti gli elementi negativi alla fine o all’inizio di un array utilizzando approcci e algoritmi semplici.
>
Tieni presente che l’ordine degli elementi non è rilevante per questo problema. Stiamo solo considerando gli elementi negativi e posizionandoli all’inizio o alla fine dell’elenco.
Quali sono i metodi per spostare tutti gli elementi negativi su un lato di un Array?
Gli array nella programmazione sono una delle strutture dati più versatili. Ciò è dovuto al fatto che, dai numeri agli interi, gli array facilitano la memorizzazione anche di infiniti numeri interi positivi, negativi e persino con valore zero. Inoltre, questi elementi all’interno dell’array potrebbero essere memorizzati in posizioni casuali indipendentemente dalla loro sequenza generale.
Esistono molti algoritmi e metodi per aiutare a ordinare e spostare questi elementi all’interno degli array. Quindi, possiamo dire che questa è una forma di ordinamento che viene eseguita sull’array secondo i requisiti del programma.
Questo problema viene spesso posto nelle interviste di programmazione. Nella sezione seguente del blog, discuteremo di questi approcci a sposta tutti gli elementi negativi alla fine di un array.
Come spostare tutti gli elementi da un lato in un array usando C?
Per imparare come spostare tutti gli elementi negativi alla fine di un array, considereremo questo problema con l’aiuto di un esempio. Qui abbiamo un array di input che consiste di numeri interi negativi e positivi.
Discutiamo più avanti in questa sezione gli approcci e i metodi per spostare gli elementi negativi verso un lato dell’array.
Input Array
1-2 3-1 8 9
Output Array
1 9 3 8-2-1
Come possiamo vedere nell’output dell’array, gli elementi negativi hanno sono stati disposti alla fine della sequenza.
Tieni presente che la disposizione di questi elementi non deve essere in un ordine perfetto. Possono essere allineati in ordine casuale purché spostiamo tutti gli elementi negativi alla fine all’interno del programma.
Ora, discutiamo i diversi approcci che possono essere applicati per lo spostamento tutti gli elementi negativi entro la fine dell’array.
Metodo 1: utilizzo dell’approccio ingenuo
Inizieremo tentando di risolvere questo problema utilizzando l’approccio ingenuo. Questo metodo è anche comunemente indicato come l’algoritmo ricorsivo utilizzato per risolvere vari altri problemi di programmazione, come l’esecuzione di un attraversamento a zigzag dell’albero binario.
Nel contesto dello spostamento di tutti gli elementi negativi alla fine di un array, possiamo inizia ordinando l’array dato in ordine decrescente In questo modo, tutti gli elementi negativi verranno accumulati alla fine dell’array Per raggiungere questo obiettivo possiamo implementare la funzione selection sort, ovvero selection sort(int arr[], int n) questa funzione, per ciascuno dell’i-esimo elemento all’interno dell’array, proveremo a capire l’elemento minimo all’interno del subarray da i+1 e proveremo a scambiare i loro valori per ordinare l’array alla fine
Complessità temporale per questo approccio:
O(n*log(n))
Metodo 2: utilizzo dell’approccio partizionato
Ora ci stiamo muovendo verso una maggiore efficienza t e approcci convenienti. Per questo metodo, utilizzeremo i cicli nidificati per eseguire solo un singolo attraversamento attraverso l’intero array.
Un metodo semplice per utilizzare l’approccio della partizione consiste nell’implementare il ciclo nidificato per l’intera lunghezza dell’array e questo ciclo ci aiuterà a rilevare gli interi negativi che devono essere spostati alla fine.
Ecco come può essere implementato questo approccio:
Puoi iniziare dichiarando una variabile come j=0 all’inizio dell’array per arr[j] Successivamente, ripeteremo l’intero dato usando il puntatore i del ciclo Ora, ad ogni passo dell’iterazione, manterremo una scheda del fatto se arr[i ]ènegativo o no Se si scopre che è vero, semplicemente scambieremo l’elemento con arr[j] e lo posizioneremo all’inizio del nostro array di input Infine, puoi incrementare l’elemento j e il suo valore e portare avanti questo processo per i restanti elementi dell’array
Complessità temporale per questo approccio:
O(n)
Qui abbiamo considerato”n”per essere la lunghezza del nostro array di input
Metodo 3: utilizzo della tecnica delle variabili o dei puntatori
Come avrai già intuito, per spostare tutti gli elementi negativi alla fine, come terzo approccio, inizializzeremo due variabili o puntatori”m”e”n”nelle posizioni iniziale e finale dell’array di input.
Utilizzando questa tecnica, manterremo un tiene traccia di tutti gli elementi all’interno dell’array e incrementa consecutivamente il puntatore m e decrementa il puntatore n.
Ecco come funzionerebbe l’algoritmo per questo approccio:
Se entrambi i puntatori m e n puntano sono punta a elementi negativi, quindi incrementa il valore dell’elemento a m Se il valore del puntatore m ha un numero positivo e il puntatore n ha un numero negativo, allora scambia entrambi i loro valori Nel caso in cui entrambi i puntatori indichino un numero intero positivo, allora decrementa il puntatore n E infine, se m punta verso un elemento negativo mentre n punta a positivo, allora incrementa m e decrementa n Esiste un’ampia gamma di problemi basati su array che possono essere risolti utilizzando i puntatori e l’approccio ingenuo come l’esecuzione di l’attraversamento a zigzag dell’albero binario. Questi approcci offrono il proprio set di classi e funzioni che possono essere efficacemente utilizzate per ridurre la complessità temporale del problema.