Creare una copia vuota di una matrice della stessa dimensione, inizializzarla con due.
Partire dall'inizio della matrice. Se si incontra 1, si scrive sulla copia dall'inizio; se si incontra 3, si scrive sulla copia dalla fine.
Senza copia (o direte che riempire la copia è un passaggio separato).
n=0, m=0
Inizia all'inizio dell'array. Se incontriamo 1 - lo cambiamo con n-esimo elemento dall'inizio, non uguale a 1 (per costruzione sarà sempre 2), n++; se incontriamo 3 - lo cambiamo con m-esimo elemento dalla fine, non uguale a 3, m++, e se incontriamo 1, seguiamo i passi della prima parte.
Senza copia (o direte che riempire la copia è un passaggio separato)
n=0, m=0
Partiamo dall'inizio della matrice. Se incontriamo 1, lo cambiamo con n-esimo elemento dall'inizio non uguale a 1 (per costruzione sarà sempre 2), n++; se incontriamo 3, lo cambiamo con m-esimo elemento dalla fine non uguale a 3, m++, e se incontriamo 1, procediamo come descritto nella prima parte.
una media di mezzo passaggio, più la stessa quantità di tempo per gli scambi
Senza copia (o direte che riempire la copia è un passaggio separato)
n=0, m=0
Partiamo dall'inizio della matrice. Se incontriamo 1, lo cambiamo con n-esimo elemento dall'inizio non uguale a 1 (per costruzione sarà sempre 2), n++; se incontriamo 3, lo cambiamo con m-esimo elemento dalla fine non uguale a 3, m++, e se incontriamo 1, procediamo come descritto nella prima parte.
Senza copia (o direte che riempire la copia è un passaggio separato)
n=0, m=0
Partiamo dall'inizio della matrice. Se incontriamo 1, lo cambiamo con n-esimo elemento dall'inizio non uguale a 1 (per costruzione sarà sempre 2), n++; se incontriamo 3, lo cambiamo con m-esimo elemento dalla fine non uguale a 3, m++, e se incontriamo 1, procediamo come descritto nella prima parte.
In un solo passaggio:
Creare una copia vuota di una matrice della stessa dimensione, inizializzarla con due.
Partire dall'inizio della matrice. Incontro 1 - scrivere alla copia dall'inizio, incontro 3 - scrivere alla copia dalla fine.
In più devi monitorare i tre puntatori allo stesso tempo!
Ti darò un piccolo compito.
Certo, è un hack, ma ai colloqui di lavoro funziona come un'apoteosi della conoscenza dell'ordinamento degli array ))
Quindi, il compito di ordinare
C'è una matrice di N celle, in cui gli uno, i due e i tre sono messi in ordine casuale.
Costruire il miglior algoritmo di ordinamento.
Contare in un passaggio, riempire l'array nel secondo passaggio.
In un solo passaggio:
Creare una copia vuota di una matrice della stessa dimensione, inizializzarla con due.
Partire dall'inizio della matrice. Se si incontra 1, si scrive sulla copia dall'inizio; se si incontra 3, si scrive sulla copia dalla fine.
Senza copia (o direte che riempire la copia è un passaggio separato).
n=0, m=0
Inizia all'inizio dell'array. Se incontriamo 1 - lo cambiamo con n-esimo elemento dall'inizio, non uguale a 1 (per costruzione sarà sempre 2), n++; se incontriamo 3 - lo cambiamo con m-esimo elemento dalla fine, non uguale a 3, m++, e se incontriamo 1, seguiamo i passi della prima parte.
Senza copia (o direte che riempire la copia è un passaggio separato)
n=0, m=0
Partiamo dall'inizio della matrice. Se incontriamo 1, lo cambiamo con n-esimo elemento dall'inizio non uguale a 1 (per costruzione sarà sempre 2), n++; se incontriamo 3, lo cambiamo con m-esimo elemento dalla fine non uguale a 3, m++, e se incontriamo 1, procediamo come descritto nella prima parte.
Senza copia (o direte che riempire la copia è un passaggio separato)
n=0, m=0
Partiamo dall'inizio della matrice. Se incontriamo 1, lo cambiamo con n-esimo elemento dall'inizio non uguale a 1 (per costruzione sarà sempre 2), n++; se incontriamo 3, lo cambiamo con m-esimo elemento dalla fine non uguale a 3, m++, e se incontriamo 1, procediamo come descritto nella prima parte.
Questo è un ottimo modo di andare.
La riduzione del numero di passaggi non dà sempre un aumento della velocità.
A+B=...
Senza copia (o direte che riempire la copia è un passaggio separato)
n=0, m=0
Partiamo dall'inizio della matrice. Se incontriamo 1, lo cambiamo con n-esimo elemento dall'inizio non uguale a 1 (per costruzione sarà sempre 2), n++; se incontriamo 3, lo cambiamo con m-esimo elemento dalla fine non uguale a 3, m++, e se incontriamo 1, procediamo come descritto nella prima parte.
Buona idea.