python - 我的快速排序 Python 代码有问题吗?
问题描述
我的快速排序代码遇到问题。
class Sort:
def quickSort(self, unsortedlist):
if len(unsortedlist) <= 1:
return unsortedlist
pivot = unsortedlist[0]
unsortedlist.remove(unsortedlist[0])
left, right = [], []
for num in unsortedlist:
if num < pivot:
left.append(num)
else:
right.append(num)
return self.quickSort(left) + [pivot] + self.quickSort(right)
if __name__ == "__main__":
a = [76, 76, 65, 72, 58, 64, 82, 3, 22, 31]
print(Sort().quickSort(a))
print(Sort().quickSort(a))
print(Sort().quickSort(a))
结果将是:
[3, 22, 31, 58, 64, 65, 72, 76, 76, 82]
[3, 22, 31, 58, 64, 65, 72, 76, 82]
[3, 22, 31, 58, 64, 65, 72, 82]
为什么排序后的列表越来越少?
解决方案
unsortedlist.remove(unsortedlist[0])
因此,每次调用列表时,都会从源quickSort
列表中删除第一个元素。
对于递归调用并不重要,因为您“控制”了列表,但对于每次调用 quickSort 之后的“顶级”调用,您已经“丢失”了其中一个元素。
推荐阅读
- python-3.x - 月过滤熊猫数据框Python
- python - Discord.py Bot 在点击它的反应后编辑消息
- node.js - Web3 节点 js:错误:事务已被 EVM 还原
- javascript - 旋转文字动画
- c++ - 将 jmp 指令视为函数指针的 DLL 调用
- python - Conv2DCustomBackpropInput:out_backprop 的大小与计算的不匹配:
- xml - XML (XACML) 语法错误 - 应为字符串文字
- python - PySpark:编写镶木地板文件时如何指定文件大小?
- c - 如何检查所有数组项是否连续并以值 9 结束
- python - Discord.py 无法禁止获取的用户