具體寫了幾個簡單的排序,其中swap函式使用了異或的方法實現:
/**
* 交換陣列中的兩個數,乙個數自己與自己異或結果為0;乙個數與0異或,結果還是自己。
* * @param arr
* @param i
* @param j
*/public static void swap(int arr, int i, int j)
複製**
此前用它實現氣泡排序和插入排序都沒有問題,在實現選擇排序的時候會出現錯誤,並且會莫名其妙地多出許多0出來,換做普通方法實現的排序又是對的。
// public static void swap(int arr, int i, int j)
複製**
public static void selectionsort(int arr)
for (int i = 0; i < arr.length - 1; i++)
swap(arr, i, minindex);//這一行
} }複製**
在執行到最後一行的時候,如果之前minindex沒有改變過,則i與minindex是相等的,在進行swap()的時候,arr[i] = arr[i] ^ arr[j];
相當於對兩個相同的數做異或運算,結果是0。swap函式出現錯誤。可以在swap函式加上if(i==j)return;
來解決。 交換的異或實現
如果想交換 a 和 b 的值,我們通常的做法是 宣告乙個臨時變數 temp,然後再實現互換,這種方式常見的讓我幾乎認為 就應該這樣做,但今日拜讀 深入理解計算機系統 一書時,卻發現了另一種巧妙的實現方式,不用第三個位置來臨時儲存,只需位操作 異或 即可。定義 a b a b ab a 為非a 1 1...
HIHOCODER 1509 異或排序
給定乙個長度為 n 的非負整數序列 a 1.n 你需要求有多少個非負整數 s 滿足以下兩個條件 1 0 s 260 2 對於所有 1 i n 有 a i xor s a i 1 xor s 第一行乙個正整數 n 第二行 n 個非負整數表示序列 a 1.n 1 n 50 0 a i 260 乙個非負正...
XOR (異或)加密簡單實現
參考 一 xor 運算 邏輯運算之中,除了 and 和 or,還有一種 xor 運算,中文稱為 異或運算 它的定義是 兩個值相同時,返回false,否則返回true。也就是說,xor可以用來判斷兩個值是否不同。true xortrue false false xo lse false true xo...