三种方式实现python版的快速排序算法代码

2022-03-11 00:00:00 算法 排序 三种

三种方式实现python版的快速排序算法代码,三种方式的效率相当,其中第一种方式最为简单,只需要一行代码搞定,第三种方式代码最为清晰。

"""
作者:皮蛋编程(https://www.pidancode.com)
创建日期:2022/3/21
功能描述:三种方式实现python版的快速排序算法代码
"""


def qsort(L):
    return ((qsort([x for x in L[1:] if x < L[0]]) + L[0:1] +
             qsort([x for x in L[1:] if x >= L[0]])
             ) if L
            else [])


def qsort2(L):
    if len(L) <= 1:
        return L
    pivot = L[0]
    less = [x for x in L if x < pivot]
    equal = [x for x in L if x == pivot]
    greater = [x for x in L if x > pivot]
    return qsort2(less) + equal + qsort2(greater)


def qsort3(arr, l, r):
    def swap(arr, s, d):
        if s != d:
            tmp = arr[s]
            arr[s] = arr[d]
            arr[d] = tmp

    if l >= r:
        return
    m = l
    for i in range(l, r):
        if arr[i] <= arr[r]:
            swap(arr, i, m)
            m += 1
    swap(arr, m, r)
    qsort3(arr, l, m - 1)
    qsort3(arr, m + 1, r)
    return arr


lst = [23, 394, 66, 43, 203, 549, 44, 670, 20, 482, 45]
print(qsort(lst))
print(qsort2(lst))
print(qsort3(lst, 0, len(lst)-1))

输出结果如下:
[20, 23, 43, 44, 45, 66, 203, 394, 482, 549, 670]
[20, 23, 43, 44, 45, 66, 203, 394, 482, 549, 670]
[20, 23, 43, 44, 45, 66, 203, 394, 482, 549, 670]
以上代码在python3.9环境下测试通过。

相关文章