Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python快速排序函数进入无限循环_Python_Algorithm_Recursion_Infinite Loop_Quicksort - Fatal编程技术网

Python快速排序函数进入无限循环

Python快速排序函数进入无限循环,python,algorithm,recursion,infinite-loop,quicksort,Python,Algorithm,Recursion,Infinite Loop,Quicksort,我有一份字典和联系人的清单 contacts = [{'first':'asasdasd', 'last':'sddafs','email':'asdsadas'}, {'first':'asasdasd', 'last':'sddafs','email':'asdsadas'}] 我想使用快速排序算法,按“last”键对列表中的词典进行排序 less = [] greater = [] def qsort_last(listD): if len(listD) < 2:

我有一份字典和联系人的清单

contacts = [{'first':'asasdasd', 'last':'sddafs','email':'asdsadas'},
{'first':'asasdasd', 'last':'sddafs','email':'asdsadas'}]
我想使用快速排序算法,按“last”键对列表中的词典进行排序

less = []
greater = []

def qsort_last(listD):
    if len(listD) < 2:
        return listD
    else:
        pivot = contacts[0]['last']
        for i in range(len(listD)):
            if listD[i]['last'] <= pivot:
                less.append(listD[i])
            else:
                greater.append(listD[i])
        return qsort_last(less) + [contacts[0]] + qsort_last(greater)

print(qsort_last(contacts))
less=[]
更大=[]
def qsort_last(列表D):
如果len(listD)<2:
返回列表
其他:
pivot=联系人[0]['last']
对于范围内的i(len(listD)):

如果listD[i]['last']则问题在于您不断向
less
greer
列表中添加元素,因此它们将不断增长而不受限制

此外,由于
pivot:
更大的.append(listD[i])
返回qsort_last(较少)+[联系人[0]]+qsort_last(较大)

已更新。现在它成功了。谢谢大家的帮助

def qsort_last(listD):
    less = []
    greater = []
    middle=[]
    if len(listD) < 2:
        return listD
    else:
        pivot = listD[0]['last']
        for i in range(len(listD)):
            if listD[i]['last'] < pivot:
                less.append(listD[i])
            elif listD[i]['last'] > pivot:
                greater.append(listD[i])
            elif listD[i]['last'] == pivot:
                middle.append(listD[i])

        return qsort_last(less) + middle + qsort_last(greater)
def qsort_last(列表d):
减=[]
更大=[]
中间=[]
如果len(listD)<2:
返回列表
其他:
pivot=listD[0]['last']
对于范围内的i(len(listD)):
如果listD[i]['last']pivot:
更大的.append(listD[i])
elif listD[i]['last']==pivot:
middle.append(listD[i])
返回最后一个排序(较小)+中间+最后一个排序(较大)

什么是
listD
?您没有以参数的形式向我们显示您的函数调用
listD
。您似乎混淆了contacts和listD之类的内容。对不起,已在范围(len(listD))中为i更新了:递归错误:与列表中的2个字典相比,最大递归深度已超过,但是如果有9个字典:在比较中超过了最大递归深度由于存在另一个错误,您总是使用contacts[0]作为轴心,而不是listD[0]。修正了,现在应该可以工作了。
def qsort_last(listD):
    less = []
    greater = []
    middle=[]
    if len(listD) < 2:
        return listD
    else:
        pivot = listD[0]['last']
        for i in range(len(listD)):
            if listD[i]['last'] < pivot:
                less.append(listD[i])
            elif listD[i]['last'] > pivot:
                greater.append(listD[i])
            elif listD[i]['last'] == pivot:
                middle.append(listD[i])

        return qsort_last(less) + middle + qsort_last(greater)