Есть способ сделать это без дополнительной переменной, используя XOR:
array[i] ^= array[j];
array[j] ^= array[i];
array[i] ^= array[j];
Идеальная демонстрация
Однако:
- Это довольно непрозрачно для тех, кто не видел этот трюк раньше или кто не понимает, как работает xor-ing
- Это работает только для типов, которые вы можете XOR. Например, вы не можете поменять объекты подобным образом.
Использование временной переменной, как объяснено в других ответах, является хорошо известным простым способом express подкачки.
Еще один способ думать об этом: две машины, пытающиеся обойти друг друга на узкой дороге:
Parking space
|
Car1 > -----/-\----- < Car2
Чтобы обойти друг друга, Car1
может въехать на парковочное место:
Car1
|
-----/-\----- < Car2
Car2
может проехать:
Car1
|
Car2 < -----/-\-----
Затем Car1
может проехать:
|
Car2 < -----/-\----- > Car1
Временная переменная - это "парковочное место" ».