交換兩個數(shù)的值是比較基礎也比較常用的算法蛤迎,比如在冒泡排序法中,從第一數(shù)開始比較,如后一個數(shù)比其小則交換兩數(shù)的值。
一般在交換兩數(shù)的值是幅虑,最簡單的方法適用的方法就是用中間變量暫存一個數(shù)。例如果善,要交換a,b的值都办,可使用中間變量c暫存其中的一個數(shù)。
核心代碼如下:
c=b;
b=a;
a=b;
當然也可以不使用中間變量的方法镜会,如以下幾種方法檬寂。
1、加法:
核心代碼如下:
a=a+b;
b=a-b;
a=a-b;
這種算法先將a和b的值賦給a,之后b等于a-b戳表,這是b的值就變成了原來的a桶至,最后a=a-b昼伴,a的值變?yōu)樵瓉淼腷.
這種方法適用于整形和浮點型的數(shù),但是用于浮點型時可能在減法后镣屹,數(shù)據(jù)可能會出現(xiàn)精度損失圃郊。
2、乘法:
核心代碼如下:
a=a*b;
b=a/b;
a=a/b;
這個方法的基本思想和上一種加法很像女蜈,只是這個算法在b=0時出錯持舆,因為分子不能等于0。
3伪窖、異或法:
核心代碼如下:
a=a^b;
b=a^b;
a=a^b;
關于異或的算法逸寓,簡單說就是兩數(shù)相同結果為1,兩數(shù)不同結果為0惰许。
- 1席覆、任何數(shù)與0異或的結果為它本身。
- 2汹买、兩個相同的數(shù)異或的結果為0佩伤。
基于以上兩點,上述的代碼可以變形為:
a=a^b;
b=a^b=a^b^b=a^0=a;
a=a^b=a^b^a=b^0=b;
這樣就和容易理解了晦毙,第一步a=a^b生巡;
的值沒有意義,這是一個邏輯運算的值见妒,這只是一個代換孤荣,用于后面兩個語句進行邏輯運算。