在語(yǔ)言學(xué)習(xí)和進(jìn)行程序設(shè)計(jì)的時(shí)候,我們交換兩個(gè)變量最常使用的方法是借助temp這個(gè)新的變量進(jìn)行轉(zhuǎn)換,代碼如下:
-----------------------------------------
<--標(biāo)準(zhǔn)算法-->
-----------------------------------------
int a = 3, b = 4;
int temp = a;
a = b;
b = temp;
-----------------------------------------
這種方法易于理解,特別適合初學(xué)者了解計(jì)算機(jī)程序的特點(diǎn),是賦值語(yǔ)句的經(jīng)典應(yīng)用,在實(shí)際開(kāi)發(fā)中,此法簡(jiǎn)單明了,不會(huì)產(chǎn)生歧義,便于交流。
但是這個(gè)算法的弊端是需要借助第三方變量--臨時(shí)變量,效率不是很高。
-----------------------------------------
下面介紹不借助臨時(shí)變量怎么進(jìn)行轉(zhuǎn)換的方法
1、算術(shù)算法
簡(jiǎn)單而言,就是普通的 + 和 - 的運(yùn)算來(lái)實(shí)現(xiàn),代碼如下:
-----------------------------------------
int a = 3, b = 4;
a = a+b;
b = a-b;
a = a-b;
-----------------------------------------
算術(shù)原理是:把a(bǔ)、b看做數(shù)軸上的點(diǎn),圍繞兩點(diǎn)間的距離來(lái)進(jìn)行計(jì)算。
具體過(guò)程:
第一句“a = a+b”求出ab兩點(diǎn)的距離之和,并且將其保存在a中;
第二句“b = a-b”求出a到原點(diǎn)的距離,并且將其保存在b中;
第三句“a = a-b”求出b到原點(diǎn)的距離,并且將其保存在a中。
完成交換。
此算法與標(biāo)準(zhǔn)算法相比,多了三個(gè)計(jì)算的過(guò)程,但是沒(méi)有借助臨時(shí)變量
2、異或算法
通過(guò)異或運(yùn)算也能實(shí)現(xiàn)變量的交換,這也許是最為神奇的,請(qǐng)看以下代碼:
-----------------------------------------
int a = 3, b = 4;
a = a^b;
b = a^b;
a = a^b;
-----------------------------------------
此算法能夠?qū)崿F(xiàn)是由異或運(yùn)算的特點(diǎn)決定的,通過(guò)異或運(yùn)算能夠使數(shù)據(jù)中的某些位翻轉(zhuǎn),其他位不變。這就意味著任意一個(gè)數(shù)與任意一個(gè)給定的值連續(xù)異或兩次,值不變。即:
a^b^b=a。將a=a^b代入b=a^b則得b=a^b^b=a;同理可以得到a=b^a^a=b;輕松完成交換。
異或運(yùn)算最大的好處是直接進(jìn)行二進(jìn)制數(shù)據(jù)操作,大大節(jié)約了轉(zhuǎn)換的時(shí)間效率。
-----------------------------------------
嘮叨兩句:
數(shù)學(xué)中的小技巧對(duì)程序設(shè)計(jì)而言具有相當(dāng)?shù)挠绊懥Γ\(yùn)用得當(dāng)會(huì)有意想不到的效果。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注