我正在尝试使用Python编写快速排序(请参见问题末尾的完整代码)。在分区函数中,我应该交换数组(称为x
)中的两个元素。我正在使用基于异或运算符的以下代码进行交换:
x[i]^=x[j]
x[j]^=x[i]
x[i]^=x[j]
我知道这应该可以工作,因为异或运算符的幂等性(即x^x=0
),而且我已经用Java和C重复了无数次,没有任何问题。我的问题是:为什么在Python中不起作用?当x[i] == x[j]
时似乎并不起作用(也许是i = j
?)。
x = [2,4,3,5,2,5,46,2,5,6,2,5]
print x
def part(a,b):
global x
i = a
for j in range(a,b):
if x[j]<=x[b]:
x[i]^=x[j]#t = x[i]
x[j]^=x[i]#x[i] = x[j]
x[i]^=x[j]#x[j]=t
i = i+1
r = x[i]
x[i]=x[b]
x[b]=r
return i
def quick(y,z):
if z-y<=0:
return
p = part(y,z)
quick(y,p-1)
quick(p+1,z)
quick(0,len(x)-1)
print x
d=[1,2]; d[0]^=d[1];d[1]^=d[0];d[0]^=d[1]
对我来说有效;d
将会是[2,1]
。 - Cyphasei == j
,正如你所提到的那样。 - Cyphase