【发布时间】:2017-03-12 02:25:40
【问题描述】:
我们知道,在实现快速排序时,我们会选择一个枢轴值。在分区阶段,我们会用右标记交换枢轴值。 这是我的代码:
def quicksort(mylist):
quicksorthelper(mylist,0,len(mylist)-1)
def quicksorthelper(mylist,first,last):
if first< last:
splitpoint=partition(mylist,first,last)
quicksorthelper(mylist,first,splitpoint-1)
quicksorthelper(mylist,splitpoint+1,last)
def partition(mylist,first,last):
pivot= mylist[first]
leftmark= first +1
rightmark= last
done = False
counter = 0
while not done:
while leftmark <= rightmark and mylist[leftmark]< pivot:
leftmark = leftmark +1
while leftmark <= rightmark and mylist[rightmark]>pivot:
rightmark= rightmark -1
if leftmark>rightmark:
done = True
else:
temp = mylist[leftmark]
mylist[leftmark]=mylist[rightmark]
mylist[rightmark]=temp
counter +=1
temp= pivot #pivot = mylist[first]
pivot = mylist[rightmark]
mylist[rightmark]=temp
return rightmark
mylist= [54,26,93,17,77,31,44,55,20]
quicksort(mylist)
print(mylist)
所以问题是,如果我写了 pivot 而不是 mylist[first],程序就不能工作,而如果我写 mylist[first] 代替 pivot,同时用 rightmark 交换值,它就可以正常工作。你能告诉我为什么会这样吗
另外,如果我尝试做这样的事情:
mylist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
sortlist=quicksort(mylist)
print(sortlist)
然后输出是 None 。不知道有什么问题
【问题讨论】:
标签: python algorithm python-3.x sorting quicksort