的一段代碼是:爲什麼在排序數組中需要臨時存儲?
if(a[i] > a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
爲什麼一個臨時變量中使用?當我嘗試不溫:這是工作
if(a[i] > a[j]){
a[i] = a[j];
}
它不會工作,但在此之前,當我比較其他變量
的一段代碼是:爲什麼在排序數組中需要臨時存儲?
if(a[i] > a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
爲什麼一個臨時變量中使用?當我嘗試不溫:這是工作
if(a[i] > a[j]){
a[i] = a[j];
}
它不會工作,但在此之前,當我比較其他變量
如果你沒有這個臨時變量
temp = a[i];
a[i] = a[j];
a[j] = temp;
,那麼你將失去在a[i]
值(先前的分配a[i] = a[j]
。
有交換價值,而無需方式。在使用時間值的解決方案是here
在C是這樣的:
int x = 10, y = 5;
// Code to swap 'x' (1010) and 'y' (0101)
x = x^y; // x now becomes 15 (1111)
y = x^y; // y becomes 10 (1010)
x = x^y; // x becomes 5 (0101)
使用XOR運算符。代碼來自here,請轉到該鏈接以查找使用此解決方案的完整說明和可能的缺點。
分配是單向操作。 a = b
僅將b
的值分配給a
。分配完成後,a
的原始值將丟失,因此無法將該值分配給b
。
聲明
a[i] = a[j]
副本是什麼a[j]
至a[i]
的a[i]
以前的內容丟失。
這就是爲什麼您需要保存以交換信息。
是一樣的,如果
int a = 1;
int b = 2;
b = a; // now contents of b is gone and cannot be assigned to a
試試這個:
int main(void) {
int a = 2, b = 5, c = 7, d = 11, temp = 0;
/* a gets overwritten before it was swapped */
a = b; // a is overwritten and becomes 5 (same value as b)
b = a; // b becomes 5 (same value as a, which is already same as b)
printf("%d %d", a, b); // this will print out 5 5
/* you can see that we lost value of a because it was overwritten */
/* c gets stored in temporary value before it was stored */
temp = c; // temp becomes 7
c = d; // c is overwritten with 11 (same value as d
d = temp; // d is overwritten with 7 (same as temp or original c)
return 0;
}
賦值a = b
副本b
值到變量a
。它不交換它們,丟失/丟棄原始值a
。
既然你不想失去原來的價值(這樣做意味着你沒有交換),在做任務時有必要在其他地方保存其中一個值。這是臨時變量的功能。
因爲你正在覆蓋'a [i]'的初始值,所以你不知道要分配什麼'a [j]' – clcto
'a [i]'的舊值會發生什麼? –