Skip to main content

Что такое стандартный своп?

В компьютерном программировании и информатике стандартный обмен - это ситуация в программе, в которой две переменные должны обмениваться своими значениями, что требует создания третьей переменной, которая будет действовать в качестве посредника при передаче значений. Стандартный своп - это парадигма программирования, то есть он может применяться в любой ситуации, в которой необходимо обмениваться двумя частями данных, и не привязан к какому-либо одному типу данных или языку программирования. В программах существует много случаев, когда значения необходимо менять местами, но это часто является стандартным компонентом в коллекциях и массивах при использовании с алгоритмами сортировки, которые должны перемещать элементы из одного индекса в коллекции, используя временную переменную для хранения значение обменивается. С аппаратной точки зрения стандартный обмен может быть поддерживаемой низкоуровневой функцией процессора для некоторых скалярных типов данных, таких как целые числа, что означает, что не требуется создавать промежуточное значение в оперативной памяти (RAM) для замены двух чисел.

Понятие стандартного свопа можно увидеть с помощью переменных A и B; в конце стандартного свопа B должно равняться A, а A должно равняться B. Если программа просто присваивает B A, то значение A будет потеряно и впоследствии не может быть присвоено B. Это требует использования временная переменная, которая будет содержать значение A, в то время как B назначается A. Последним этапом является назначение значения временной переменной B, завершив обмен.

Одним из наиболее распространенных приложений для стандартного обмена является использование алгоритма сортировки в массиве или коллекции. Если алгоритм сортировки определил, что данные в индексе массива 1 должны быть заменены данными в индексе 10, тогда можно выполнить стандартный обмен данными. Это можно сделать исключительно быстро, используя ссылки на указатели в таких языках, как C.

Сложность может возникнуть в некоторых объектно-ориентированных языках программирования, когда необходимо заменить два экземпляра объекта. В некоторых очень редких случаях простой обмен ссылками на объекты не инициирует фактический обмен. Вместо этого единственный способ обмениваться объектами - это клонировать внутренние данные, поле за полем, между двумя объектами и переменной временного объекта.

Существует один метод, который технически можно использовать для выполнения стандартного обмена с использованием логического оператора exclusive-or (XOR). Обмен XOR основан на том факте, что, когда два бита вычисляются с помощью XOR, они по существу создают маску, которая может быть обращена с помощью одного или обоих операторов. Таким образом, две переменные, A и B, можно поменять местами, сначала создав маску с XOR двух переменных, затем используя XOR, чтобы сначала снять маску со значения для B, а затем со значением A. К сожалению, хотя этот метод избегает создание временной переменной также не приведет к перестановке во всех случаях, особенно когда A и B равны друг другу и в случаях, когда оптимизация компилятора может изменить фактическую операцию.