Я только что реализовал Quicksort в python-3, а следующее - выдержка для механизма подкачки, участвующего в каждом вспомогательном массиве.
Теперь я не могу не заметить, что это выглядит очень похоже на цикл на основе C. Это имеет смысл, так как я прихожу с долгого времени развития C++. Мне было интересно, можно ли сделать этот цикл более питоническим.
Я пытался использовать 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
является избыточным, его можно удалить, и код будет вести себя одинаково.
Однако реальный питонический путь:
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
while
.