我正在尝试在python中实现quicksort。问题是如何在数组a
中递增/递减i / j的值。我知道我应该写i=i+1
并且在python中没有像i++
这样的东西,但是我不明白我应该以哪种方式做到这一点。
我是新手,这是我的代码。
def quicksort(a,lo,hi):
if(hi<=lo):
return
i = lo - 1
j = hi
v = a[hi]
while True:
while(a[++i] < v):
pass
while(v < a[--j]):
if(j==lo):
break
if(i>=j):
break
t = a[i]
a[i] = a[j]
a[j] = t
t = a[i]
a[i] = a[hi]
a[hi] = t
quicksort(a, lo, i - 1)
quicksort(a, i + 1, hi)
答案 0 :(得分:0)
在python中,你不能分配和获取值,这是一个故意的限制,以避免拼写错误的问题,找到正确的序列点......
你别无选择,无法模仿&#34; C端口代码:
while(a[++i] < v):
pass
while(v < a[--j]):
if(j==lo):
break
(请注意,两个构造都会生成无限循环,因为:
++i == i
和
--j == j
(应用一元加上任意次数或一元减去偶数次给出相同的数字,请参阅Why Don't Two Plus Operators Throw an Error (e.g., 1 + + 2))
所以改为:
i += 1
while(a[i] < v):
i += 1
j -= 1
while(v < a[j]):
if(j==lo):
break
j -= 1
答案 1 :(得分:0)
以下构造在Python中的工作方式与在C ++中的工作方式不同:
while(a[++i] < v):
以及这一个:
while(v < a[--j]):
您更改代码的方式如下:
def quicksort(a,lo,hi):
if(hi<=lo):
return
i = lo - 1
j = hi
v = a[hi]
while True:
i += 1
while(a[i] < v):
i += 1
pass
j -= 1
while(v < a[j]):
j -= 1
if(j==lo):
break
if(i>=j):
break
t = a[i]
a[i] = a[j]
a[j] = t
t = a[i]
a[i] = a[hi]
a[hi] = t
quicksort(a, lo, i - 1)
quicksort(a, i + 1, hi)