В зависимости от того, больше или меньше новое значение, чем предыдущее, его можно «надувать».
Псевдокод будет выглядеть примерно так:
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
Конечно, лучше использовать бинарный поиск.
Сначала найдите новое место в коллекции, где должен быть элемент. Затем сдвиньте элементы на место. Если новый индекс спота больше текущего индекса спота, вы сдвигаете элементы на один элемент вниз, в противном случае вы перемещаете их вверх. Вы перемещаете элементы, начиная с места, которое вы ранее занимали, на место, которое хотите занять. Затем вы сохраняете значение в найденном месте.
Например, предположим, что эта коллекция:
a b c d e f g h i j
10 20 30 40 50 60 70 80 90 100
Затем вы хотите изменить значение элемента f с 60 на 95.
Сначала вы выясните, где это должно быть. Используя бинарный поиск, мы обнаружили, что он должен быть между 90 и 100:
a b c d e f g h i j
10 20 30 40 50 60 70 80 90 100
^
+- here
Затем вы сдвигаете элементы с текущей позиции на один элемент, например так:
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
А потом вы сохраняете значение в ?? пространство, которое дает вам это образование
a b c d e g h i f j
10 20 30 40 50 70 80 90 95 100