異或運算
void
swap
(int
&a,int
&b)
臨時變數方法
void
swap
(int
&a,int
&b)
異或方法的缺點
對於臨時變數法,每次賦值只要讀取乙個變數的值到暫存器,然後再從暫存器寫回到另乙個變數中即可,前後涉及兩次記憶體寫入操作;但是對於異或運算操作,每次都需要讀取兩個資料到暫存器中,再進行運算操作,之後把結果寫回到變數中,前後共需要三次記憶體寫入操作。另外一點,異或操作的**可讀性差。
參考 鏈結
異或方法的隱患
現在交換arr陣列下標為i和j的元素,為了簡化**,沒有對i和j相等的情況作特殊處理,導致有一種情況,i == j下:
swap
(data[i]
, data[j]
);
在執行了 arr[i] = arr[i] ^ arr[j] 後,arr[i] = arr[j] = 0。 交換兩個整型數各種方法總結
交換兩個整型數是c c 中最常見的操作。實現這個操作的方法很多。最基本的方法就是使用乙個臨時變數,具體的 如下 int a,b int tmp tmp a a b b tmp 如果以函式的形式寫出來的話就是 void swap int a,int b 在c 中,可以使用引用來實現的比較優雅 void...
筆記 兩種交換元素的方案對比
交換元素,使序列有序,求最少交換次數 第一種是只能交換 相鄰 元素,使序列有序,求最小交換次數,假如是是序列公升序,只需要求逆序對數。3 2 1 1 2 3 3次4 2 3 1 1 2 3 4 2 3 1 4 3 2 1 3 4 1 1 2 3 4 1 正好對應每個數,和他右邊數的逆序對個數 第二種...
不使用中間變數交換兩數
交換兩個數的值是比較基礎也比較常用的演算法,比如在氣泡排序法中,從第一數開始比較,如後乙個數比其小則交換兩數的值。一般在交換兩數的值是,最簡單的方法適用的方法就是用中間變數暫存乙個數。例如,要交換a,b的值,可使用中間變數c暫存其中的乙個數。核心 如下 c b b a a b 當然也可以不使用中間變...