在Python的快速排序算法的以下实现中:
def quicksort(listT):
greater=[]
lower=[]
pivot=[]
if len(listT)<=1:
return listT
else:
pivot=listT[0]
for i in listT:
if i<pivot:
lower.append(i)
elif i>pivot:
greater.append(i)
else:
pivot.append(i)
lower=quicksort(lower)
greater=quicksort(greater)
return lower+pivot+greater
我想知道这个实现中第一个条件究竟是做什么的,因为我看到它将列表的每个部分划分为更大和更低的部分时,根据数据透视,列表中会有一个时刻长度小于1,但此返回列表不以任何方式连接。可以改变这种情况吗?
答案 0 :(得分:2)
终止递归需要len(listT)<=1
。 Quicksort将问题分解为更容易解决的子问题。当子问题是空列表或长度为1的列表时,它已经解决(不需要排序),因此可以直接返回结果。
答案 1 :(得分:0)
如果未说明初始条件,则排序将在
处失败pivot = listT [0]#因为列表可能为空,它会引用无效索引,或
lower = quicksort(lower)#实际上它永远不会结束,因为堆栈一直在这条线上建立。