經典的面試問題之一是如何在不使用第三個變數作為臨時儲存空間的情況下交換兩個變數的值。通常,這是使用臨時變數來完成的,如下所示:
temp = a; a = b; b = temp;
但是,這種方法需要額外的記憶體分配和操作。另一種解決方案是使用 XOR 交換演算法。
XOR 交換演算法透過利用異或 (XOR) 運算來運作。 XOR 運算子具有下列屬性:XOR a 總是傳回 0,而 XOR b 如果 b 為 0,則傳回 a;如果 a 為 0,則 XOR b 傳回 b。
使用此屬性,我們可以交換兩個變數的值x 和y 如下:
// XOR swap function void xorSwap(int* x, int* y) { if (x != y) { //ensure that memory locations are different *x ^= *y; *y ^= *x; *x ^= *y; } }
為什麼會這樣有效:
異或運算:然後我們按順序執行以下異或運算:
由於這些操作,*x 現在包含 *y 的原始值,並且 *y 包含 *x 的原始值。
這裡是如何使用XOR 交換算法的示例在C:
#include <stdio.h> int main() { int a = 10; int b = 15; printf("Before swap: a = %d, b = %d\n", a, b); xorSwap(&a, &b); printf("After swap: a = %d, b = %d\n", a, b); return 0; }
輸出:
Before swap: a = 10, b = 15 After swap: a = 15, b = 10
雖然XOR 交換演算法很有效且不需要第三個變量,但它並不總是最優解。在許多情況下,編譯器將使用更傳統的方法和臨時變數來最佳化程式碼。因此,在使用 XOR 交換演算法之前考慮程式的具體要求非常重要。
以上是如何在不使用第三個變數的情況下交換變數值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!