发布网友 发布时间:2024-10-06 09:28
共2个回答
热心网友 时间:7分钟前
procedure swap(var a,b:longint);
var t:longint;
begin
// t:=a; a:=b; b:=t;
a:=a xor b;
b:=a xor b;
a:=a xor b; //(位运算交换)
end;
这个算法是正确的, 它编译出来的机器代码效率比三角交换高,你说在直接放在排序中用错误,可能问题在是程序上,代码贴出来看吧。
热心网友 时间:3分钟前
xor是“异或”表达式
比如a=2 b=3
则二进制是a=(10)2 b=(11)2
第一次运算 :同位得0 异或得1 ,10 xor 11 = 01(a) ,此时a=01 b=11
第二次运算 :01 xor 11 = 10(b) ,此时a=01 b=10
第三次运算 :01 xor 10= 11(a) ,此时a=11 b=10
运算方法
a=1 0
- -
b= 1 1
↓↓
得 0 1