Python中的简单合并排序错误
我正在用Python进行合并排序赋值,但我一直有Python中的简单合并排序错误,python,list,python-3.x,recursion,mergesort,Python,List,Python 3.x,Recursion,Mergesort,我正在用Python进行合并排序赋值,但我一直有RuntimeError的错误:超过了最大递归深度 这是我的密码: def merge_sort(list): left_num = len(list) // 2 left_sorted = merge_sort(list[:left_num]) right_sorted = merge_sort(list[left_num:]) final_sort = merge(left_sorted, right_sort
RuntimeError的错误:超过了最大递归深度
这是我的密码:
def merge_sort(list):
left_num = len(list) // 2
left_sorted = merge_sort(list[:left_num])
right_sorted = merge_sort(list[left_num:])
final_sort = merge(left_sorted, right_sorted)
return final_sort
def merge(left_sorted, right_sorted):
final_sort = []
while left_sorted and right_sorted:
if left_sorted[0] <= right_sorted[0]:
final_sort.append(left_sorted[0])
left_sorted.pop(0)
else:
final_sort.append(right_sorted[0])
right_sorted.pop(0)
final_sort = final_sort + left_sorted + right_sorted
return final_sort
if __name__ == "__main__":
list = [4, 2]
print(merge_sort(list))
def merge_排序(列表):
left_num=len(列表)//2
左排序=合并排序(列表[:左排序])
右排序=合并排序(列表[左编号:)
最终排序=合并(左排序,右排序)
返回最终排序
def合并(左排序,右排序):
最终排序=[]
左排序和右排序时:
如果左排序[0]则在merge\u sort
中没有退出点。您需要执行以下操作:
left_num = len(list) // 2
if left_num <= 1:
return list
left_num=len(列表)//2
如果left\u num在合并\u排序
中没有退出点。您需要执行以下操作:
left_num = len(list) // 2
if left_num <= 1:
return list
left_num=len(列表)//2
如果在编写递归函数时使用left_num,则应注意基本情况,它决定递归何时结束
在您的案例中,基本案例缺失。例如,如果列表只有一个元素,则不必再次对其进行递归排序。这就是你的基本条件
def merge_sort(list):
if len(list) == 1:
return list
...
...
注意:变量名list
隐藏内置函数list
。所以最好避免使用内置名称
由于您正在执行大量的pop(0)
s,因此值得注意的是,它在列表中效率不高。引用
虽然list
对象支持类似的操作,但它们针对快速固定长度操作进行了优化,并且会为pop(0)
和insert(0,v)
操作带来O(n)内存移动成本,这两种操作都会改变基础数据表示的大小和位置
因此,如果您经常弹出,更好的替代方法是使用,而不是使用list
。实际从一个窗口弹出
编写递归函数时,应注意基本情况,它决定递归何时结束
在您的案例中,基本案例缺失。例如,如果列表只有一个元素,则不必再次对其进行递归排序。这就是你的基本条件
def merge_sort(list):
if len(list) == 1:
return list
...
...
注意:变量名list
隐藏内置函数list
。所以最好避免使用内置名称
由于您正在执行大量的pop(0)
s,因此值得注意的是,它在列表中效率不高。引用
虽然list
对象支持类似的操作,但它们针对快速固定长度操作进行了优化,并且会为pop(0)
和insert(0,v)
操作带来O(n)内存移动成本,这两种操作都会改变基础数据表示的大小和位置
因此,如果您经常弹出,更好的替代方法是使用,而不是使用list
。实际从一个窗口弹出
请问,对于deque
,如何获取popleft()
之后的剩余“列表”?对于deque
,如何获取popleft()之后的剩余“列表”
?