4 ms·
Come to think of it, swapping two variables in place is a horrible question - because you can't really do it! A statement like a = a + b requires the (invisib
by zeteo 14y ago
Come to think of it, swapping two variables in place is a horrible question - because you can't really do it! A statement like
a = a + b
requires the (invisible) presence of a register where a + b (or xor or whatever) is placed right before being written back to a. But then you might as well use this register directly for the swap instead of dabbling around with one-to-one functions.
- steveklabnik 14y agoAlso, it depends on which language you're using... $ irb irb(main):001:0> a = 1 => 1 irb(main):002:0> b = 2 => 2 irb(main):003:0> b, a = a, b => [1, 2] irb(main):004:0> puts "#{a} #{b}" 2 1 => nil (obviously this has the same flaw you mention, the interpreter is doing stuff for you. It follows the letter of the 'no intermediate variables' only.)
- michaelfairley 14y agoYou can also follow the letter in C, Java, etc.: a ^= b b ^= a a ^= b
- deleted 14y ago[deleted]
- jervisfm 14y agoWhat does that do?
- steveklabnik 14y agohttp://en.wikipedia.org/wiki/XOR_swap_algorithm http://en.wikipedia.org/wiki/XOR_swap_algorithm
- jervisfm 14y agoThanks for the pointer.
- chris_mahan 14y agopython: a, b = b, a
- deleted 14y ago[deleted]
- simcop2387 14y agoJust to add a perl version for the ruby and python ones. ($a, $b) = ($b, $a)