A seconda che il nuovo valore sia maggiore o minore di quello precedente, è possibile "bollarlo" al suo posto.
La pseudo-codice sarebbe simile a questa:
if new value larger than old value
then if new value is larger than next value in collection
then swap the value with the next value
iterate until value is not larger than next value
else if new value is smaller than previous value in collection
then swap the value with the previous value
iterate until value is not smaller than the previous value
Naturalmente, un modo migliore sarebbe quella di utilizzare la ricerca binaria.
Innanzitutto, individuare il nuovo punto nella raccolta in cui dovrebbe trovarsi l'elemento. Quindi, sposta gli elementi in posizione. Se il nuovo indice spot è maggiore dell'indice spot corrente, spostate gli elementi di un elemento, altrimenti li spostate verso l'alto. Sposti gli elementi a partire dal punto che hai precedentemente occupato, a quello che vuoi occupare. Quindi memorizzi il valore nel punto che hai trovato.
Per esempio, assumere questa collezione:
a b c d e f g h i j
10 20 30 40 50 60 70 80 90 100
poi si desidera cambiare il valore dell'elemento f da 60 a 95.
Per prima cosa è capire dove dovrebbe essere.Utilizzando ricerca binaria, abbiamo scoperto che dovrebbe essere tra 90 e 100:
a b c d e f g h i j
10 20 30 40 50 60 70 80 90 100
^
+- here
Poi si sposta gli elementi dalla posizione corrente verso il basso un elemento, in questo modo:
a b c d e f g h i j
10 20 30 40 50 60 70 80 90 100 <-- from this
10 20 30 40 50 70 80 90 ?? 100 <-- to this
E poi si memorizza il valore dentro ?? spazio, che ti dà questa formazione
a b c d e g h i f j
10 20 30 40 50 70 80 90 95 100
La risposta dipende da come è rappresentata la lista (elenco collegato, matrice) e se si ha accesso diretto o meno all'elemento modificato o deve prima trovarlo. Come dato, questa domanda è sottostimata. –