在語言學習和進行程序設計的時候,我們交換兩個變量最常使用的方法是借助temp這個新的變量進行轉換,代碼如下:
-----------------------------------------
<--標准算法-->
-----------------------------------------
int a = 3, b = 4;
int temp = a;
a = b;
b = temp;
-----------------------------------------
這種方法易於理解,特別適合初學者了解計算機程序的特點,是賦值語句的經典應用,在實際開發中,此法簡單明了,不會產生歧義,便於交流。
但是這個算法的弊端是需要借助第三方變量--臨時變量,效率不是很高。
-----------------------------------------
下面介紹不借助臨時變量怎么進行轉換的方法
1、算術算法
簡單而言,就是普通的 + 和 - 的運算來實現,代碼如下:
-----------------------------------------
int a = 3, b = 4;
a = a+b;
b = a-b;
a = a-b;
-----------------------------------------
算術原理是:把a、b看做數軸上的點,圍繞兩點間的距離來進行計算。
具體過程:
第一句“a = a+b”求出ab兩點的距離之和,並且將其保存在a中;
第二句“b = a-b”求出a到原點的距離,並且將其保存在b中;
第三句“a = a-b”求出b到原點的距離,並且將其保存在a中。
完成交換。
此算法與標准算法相比,多了三個計算的過程,但是沒有借助臨時變量
2、異或算法
通過異或運算也能實現變量的交換,這也許是最為神奇的,請看以下代碼:
-----------------------------------------
int a = 3, b = 4;
a = a^b;
b = a^b;
a = a^b;
-----------------------------------------
此算法能夠實現是由異或運算的特點決定的,通過異或運算能夠使數據中的某些位翻轉,其他位不變。這就意味着任意一個數與任意一個給定的值連續異或兩次,值不變。 即:
a^b^b=a。將a=a^b代入b=a^b則得b=a^b^b=a;同理可以得到a=b^a^a=b;輕松完成交換。
異或運算最大的好處是直接進行二進制數據操作,大大節約了轉換的時間效率。
-----------------------------------------
嘮叨兩句:
數學中的小技巧對程序設計而言具有相當的影響力,運用得當會有意想不到的效果。
