Python快速排序问题

发布于 2022-09-12 00:55:52 字数 922 浏览 23 评论 0

自己在一边看算法一边用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)

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ぇ气 2022-09-19 00:55:52

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

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

悲凉≈ 2022-09-19 00:55:52
flag = list[len(list) - 1:]

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

flag = list[-1]

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文