那些年用過的swap函式

2021-06-26 23:36:57 字數 1936 閱讀 3981

其中的函式原型是:

(1) void swap(int &a,int &b);傳引用

(2)void swap(int *a,int *b);傳位址

下面就第二個函式原型分析,**如下:

c code :

#include #include /**

使用中間變數tmp

*/void swap(int *a,int *b)

/** 使用加減法計算

*/void swap1(int *a,int *b)

/** 使用乘除法計算

*/void swap2(int *a,int *b)

/** 使用異或運算

*/void swap3(int *a,int *b)

int main(void)

/**執行結果:

start a:2 , b:3

swap a:3 , b:2

swap1 a:3 , b:2

swap2 a:3 , b:2

swap3 a:3 , b:2

*/

這裡總結了4個swap()函式的實現方法,前三個我就不詳細說了,分別用了:中間變數法,加減法,乘除法。相信我不說大家也能看得懂。我主要說一下第四種方法——異或法。

這裡的異或法是利用了高等數學中的知識:

對任意數 a ,b ,c

(1)a ^ 0 = a

(2)a ^ a = 0

(3)(a ^b)^c=a^(b^c)

(4)a^b = b^a

這三條常識:

我們看到函式swap3()中,我們姑且將這兩個引數成為a,b

第一句 a = a^b; 咱們讓 c =a^b;

第二句 b = a^b;其時就是 b = c^b =a^(b^b)=a^0=a;

第三句 a = a^b;其時就是 a = c^b =a^b^a=b^(a^a)=b^0=b;

這樣就給交換過來了。。。。。

(1)空間效能

(2)時間效能

這其實沒啥說的

空間效能上swap()浪費乙個int 空間,其他沒有空間開銷。

時間效能上,雖然說都是執行3條語句,但是與語句不一樣,效率上 :位運算》加減》乘除 (大致上是這樣,具體情況還得具體分析)

所以swap3()技高一籌。。。。。。

是不是這幾個函式一定正確???呵呵。這可不一定,引數是int型別

swap1() swap2()  你想想看。。可能造成溢位的。。

事實的確是這樣 當a =2100000001 b=2100000002

你試一下。。呵呵。。swap() 和swap3()依然堅挺。。而swap1() ,swap2() 。。。完了。。

swap()當之無愧是最好的。。可讀性是最好的。。

綜上所述:建議大家使用swap3() ,swap()。。。

**:

那些年我們用過的SSD

具體資訊如下 從比較中刪除 essentials 狀態launched 順序讀取 500 mb s 順序寫入 315 mb s 隨機讀取 100 跨度 75000 iops 隨機寫入 100 跨度 9000 iops 延遲 讀取 50 s 延遲 寫入 65 s 電源 活動 3.5w 電源 閒置 0....

用過php,那些年我們一起用過的 PHP 函式

用這個帖子記錄一下 php 中比較常用的函式以及使用過程中需要注意的點,此貼持續更新 1.strpos 函式 首先,我們知道 strpos 函式是用於查詢乙個字串在另乙個字串第一次出現的位置,示例如下 3 echo strpos i love php,i love php too php 輸出結果 ...

那些年用過的RSS閱讀器

最近幾天在折騰rss閱讀器,作業系統是黑蘋果os x 10.9.5,換了各種各樣的閱讀器,總沒有一款適合我,抓狂中。下面是對這兩天換的閱讀器的對比分析 1.feedly 缺點 不穩定 gmail經常無法連線,而且免費版無法匯出opml,勉為其難的在使用中 優點 使用者體驗完美,操作流暢 2.shro...