Python快速排序问题

自己在一边看算法一边用python实现的时候发现这么个问题:
算法导论中的快排:

def quick_sort(array, l, r):
    if l < r:
        q = partition(array, l, r)
        quick_sort(array, l, q - 1)
        quick_sort(array, q + 1, r)
def partition(array, l, r):
    x = array[r]
    i = l - 1
    for j in range(l, r):
        if array[j] <= x:
            i += 1
            array[i], array[j] = array[j], array[i]
    array[i + 1], array[r] = array[r], array[i+1]
    return i + 1

我自己理解后写出来的:

def quickSort(list):  
    if len(list) <= 1: return list  
    flag = list[len(list) - 1:]  
    left = []  
    right = []  
    for i in range(len(list) - 1):  
        if flag[0] > list[i]:  
            left.append(list[i])  
        else:  
            right.append(list[i])  
    return quickSort(left) + flag + quickSort(right)

如果我写的不是快速排序,那这是个什么(这里使用了额外的内存空间,似乎不是原地排序算法了)

阅读 2.4k
2 个回答

同一种算法,可以有不同的写法,时空效率也不一样,你这个算是低效的快排。

算法只是描述思路,很多细节是不会规定的,这个需要看实现者的编码水平了。快排有首位交替遍历的算法,也有单向遍历的实现,都叫快排。

flag = list[len(list) - 1:]

你这一句,是打算取list的最后一个元素吗?
貌似这句和下面这句是一样的效果:

flag = list[-1]

那flag就变成标量了。难道是我分析错了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题