Java 快速交換 位操作的應用

 Java快速交換兩個數的值
2010-10-22 15:30:19
標籤:算法 休閒 職場
原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://wujuxiang.blog.51cto.com/2250829/409196
通過使用異或運算,可以快速將兩個數的值交換:原理如下:

我們知道異或是相同取0相反取1,如:

 0101異或1101的結果是1000。如對兩個數,經過三次進行異或運行後的結果是這兩個數的值互換。如 a = 0101, b=1101,則進行的操作如下:

第一次異或運算: a = a ^b = 1000
第二次異或運算: b = a^b = 0101
第三次異或運算: a = a^b = 1101

至此,a和b這兩個數的值已經互換了,並且沒有使用到額外的儲存空間。
那麼,能不能直接寫一個函數直接將a和b作爲值參數進行數值互換呢。答案是否定的。我們知道函數參數的以值傳遞方式是對參數的值拷貝到當前函數棧幀中,相當於對傳遞過來的參數作一個內存拷貝吧。這樣,傳遞過來的參數值改變並沒有影響到原來與參數的變量或常量的值。如果是傳遞過來的是引用,結果就不一樣了。

使用java語言簡單實現如下:

public static void quickSwap(int vaules[]){
   values[0] = values[0]^values[1];
   values[1] = values[0]^values[1];
   values[0] = values[0]^values[1];
}

本文出自 “有思想的代碼” 博客,請務必保留此出處http://wujuxiang.blog.51cto.com/2250829/409196

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章