【发布时间】:2021-11-09 21:05:45
【问题描述】:
我是 Python 新手,这是我编写的快速排序代码:
def Quick(List):
if len(List) <= 1:
return List
pivot = List[0]
l_idx = 0
r_idx = len(List) - 1
while l_idx != r_idx:
while List[l_idx] < pivot and l_idx < r_idx:
l_idx += 1
while List[r_idx] > pivot and l_idx < r_idx:
r_idx -= 1
if l_idx < r_idx:
List[l_idx], List[r_idx] = List[r_idx], List[l_idx]
List = Quick(List[0: (l_idx)]) + [List[l_idx]] + Quick(List[(l_idx + 1):])
return List
我要排序的列表是 [598, 862, 950, 953, 373, 981, 201, 258, 427, 669]。
如果我运行以下代码,我会得到
xxx = [598, 862, 950, 953, 373, 981, 201, 258, 427, 669]
print(xxx)
# Gives me: [598, 862, 950, 953, 373, 981, 201, 258, 427, 669]
print(Quick(xxx))
# Gives me:[201, 258, 373, 427, 598, 669, 862, 950, 953, 981], which is the correct result.
print(xxx)
# Gives me: [427, 258, 201, 373, 598, 981, 953, 950, 862, 669], which is not the correct result.
我想知道为什么我得到的结果与我第二次打印列表“xxx”时返回的结果完全不同。谢谢!!
【问题讨论】:
-
您希望第二个
print(xxx)打印您的排序列表还是原始未排序列表? -
我认为它应该给我排序列表。
-
那么你需要将你的
Quick函数的返回结果赋回名称xxx,例如xxx = Quick(xxx)。然后print(xxx)将打印排序列表。 -
我试过了,它确实给出了正确的结果,但我想知道我的 Quick(List) 出了什么问题,当我第二次打印它时,它给了我列表的全新顺序.
-
我认为你的算法返回一个完整的新列表,而不是在原始列表上工作,因此原始列表没有按预期排序(由于第一次调用该方法,即使它的元素也有点乱序,不是递归的)。
标签: python-3.x algorithm sorting recursion