Статья посвящена тому, как обменивать переменные значениями. В статье описан, как классический подход, так и подход без использования дополнительных ячеек памяти. Второй подход работает для переменных, для которых операции сложения и вычитания не приводят к потере точности. Какой способ лучше из них - решать Вам, исходя из случая, какое оборудование у Вас используется, т.к. программирование бывает не только серверов и персональных компьютеров, но и микроконтроллеров, к примеру, для роботизированного конвейера.
Для данного способа требуется дополнительная ячейка данных, размер которой равен размеру типа данных основных переменных.
Для получения представления рассмотрим алгоритм обмена значениями переменных с использованием памяти, он расположен во второй колонке следующей таблицы:
№ | Код | Комментарий |
1 | int var1 = 5; | var1 = 5 |
2 | int var2 = 7; | var2 = 7 |
3 | ... | |
4 | int var1_temp = var1; | var1_temp = 5 |
5 | var1 = var2; | var1 = 7 |
6 | var2 = var1_temp; | var2 = 5 |
Таблица 1. Способ обмена переменными с использованием памяти.
Как видите переменные обменялись значениями, которые были у них вначале.
Опишем алгоритм словесно:
Для данного способа не требуется дополнительная ячейка данных, размер которой равен размеру типа данных основных переменных.
Для получения представления рассмотрим алгоритм обмена значениями переменных без использования памяти, он расположен во второй колонке следующей таблицы:
№ | Код | Комментарий |
1 | int var1 = 5; | var1 = 5 |
2 | int var2 = 7; | var2 = 7 |
3 | ... | |
4 | var1 = var1 + var2; | var1 = 12 |
5 | var2 = var1 - var2; | var2 = 5 |
6 | var1 = var1 - var2; | var1 = 7 |
Таблица 2. Способ обмена переменными без использования памяти.
Как видите переменные обменялись значениями, которые были у них вначале.
Опишем алгоритм словестно:
Как видно из алгоритмов, они равны по количеству выполняемых операций, но второй способ (Способ обмена переменными без использования памяти) не требует ячейку памяти, что делает его более оптимизированным. К тому же доступ к оперативной памяти довольно долгий.
Выбирайте второй способ обмена переменными, когда у типа данных есть аналогичная аддитивность.