我刚刚在python-3中实现了Quicksort,以下是每个子数组中涉及的交换机制的摘录。
现在,我不禁注意到它看起来非常像基于C的循环。这是有道理的,因为我要从事很长时间的C ++开发。
我想知道是否可以使此循环更pythonic。
我尝试使用for items in array
,但这没有帮助,因为迭代器不应在循环的每一轮都增加。
任何建议表示赞赏!
# last elem is pivot at start
pivPos = end
# iterate the list and bring pivot to correct position
count = 0
while (count != pivPos):
# swap places with elem just before pivot
if arr[count] >= arr[pivPos]:
temp = arr[count]
arr[count] = arr[pivPos - 1]
arr[pivPos - 1] = temp
# now swap the pivot
arr[pivPos - 1] = arr[pivPos]
arr[pivPos] = temp
# update pivPos
pivPos -= 1
else:
count += 1
continue
最佳答案
这部分:
temp = arr[count]
arr[count] = arr[pivPos - 1]
arr[pivPos - 1] = temp
arr[pivPos - 1] = arr[pivPos]
arr[pivPos] = temp
可以这样写而无需
temp
:arr[count], arr[pivPos-1], arr[pivPos] = arr[pivPos-1], arr[pivPos], arr[count]
同样,
continue
是多余的,您可以将其删除,并且代码的行为相同。但是,真正的pythonic方法是:
arr.sort()
完整编辑的代码易于参考:
pivPos = end
count = 0
while count != pivPos:
if arr[count] >= arr[pivPos]:
arr[count], arr[pivPos-1], arr[pivPos] = arr[pivPos-1], arr[pivPos], arr[count]
pivPos -= 1
else:
count += 1
关于python - 如何使以下快速排序更加“pythonic”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52506180/