演算法 不使用額外變數交換資料

2021-09-25 10:15:11 字數 706 閱讀 6478

問題:

如果x=10,y=23變為x=23,y=10不允許通過第三方變數

方法一:異或法

x= x^y;

y=x^y;

y=x^y;

證明:

易知不論異運算、或運算都不涉及進製、退位。

故可以考慮x,y一位時候的情況,他對任何位都是一樣的。

1、x=1,y=1

x=x^y=0

y=x^y=1

x=x^y=1

2、x=1,y=0

x=x^y=1

y=x^y=1

x=x^y=0

3、x=0,y=0

x=x^y=0

y=x^y=0

x=x^y=0

4、x=0,y=1

x=x^y=1

y=x^y=0

x=x^y=1

這一位與其他所有位情況一樣,就證明了演算法的正確。

從異或運算性質可得,異或滿**換律

從上面可以發現也滿足結合律,通過這連個定律也可以證明。

————————————————————————————————————————————

方法二:算術法

x=x+y;

y=x-y;

x=x-y;

不使用中間變數交換變數a b變數

這是一道經典題目,很基礎,但是經常考。題目描述 不用任何變數交換a b兩個變數。分析 交換兩個變數的問題在c語言入門書籍中都有所涉及。在講解c語言的函式的時候老師都會告訴我們,實參和形參的問題,下面的函式是不能完成交換兩個變數的 void swap int a,int b int temp temp...

不使用中間變數交換兩數

交換兩個數的值是比較基礎也比較常用的演算法,比如在氣泡排序法中,從第一數開始比較,如後乙個數比其小則交換兩數的值。一般在交換兩數的值是,最簡單的方法適用的方法就是用中間變數暫存乙個數。例如,要交換a,b的值,可使用中間變數c暫存其中的乙個數。核心 如下 c b b a a b 當然也可以不使用中間變...

不使用中間變數交換兩個數

在交換兩個數的值時,最經常使用的方法是借助於乙個中間變數來進行交換。temp a a b b temp 通過巧妙的加法與減法運算來實現兩個數的交換。a a b b a b a a b 使用位運算 異或 來交換兩個數。a a b b a b a a b 其正確性是因為異或運算滿足 交換律和 結合律。證...