python初始条件下的快速排序算法

时间:2015-11-04 13:33:39

标签: python algorithm

在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,但此返回列表不以任何方式连接。可以改变这种情况吗?

2 个答案:

答案 0 :(得分:2)

终止递归需要len(listT)<=1。 Quicksort将问题分解为更容易解决的子问题。当子问题是空列表或长度为1的列表时,它已经解决(不需要排序),因此可以直接返回结果。

答案 1 :(得分:0)

如果未说明初始条件,则排序将在

处失败
  • pivot = listT [0]#因为列表可能为空,它会引用无效索引,或

  • lower = quicksort(lower)#实际上它永远不会结束,因为堆栈一直在这条线上建立。