【数据结构】快速排序-python实现

【数据结构】快速排序-python实现

快速排序介绍

快速排序运用了分治的思想。对包含n个数的输入数组,最坏情况运行时间为o(n2)。虽然最坏情况运行时间比较差,但是快速排序通常是用于排序的最佳的实用选择。这是因为其平均性能相当好:期望的运行时间为o(nlog2n),且o(nlog2n)记号中隐含的常数因子很小。另外,它还能够进行就地排序,在虚存环境中也能很好地工作。–《算法导论》

时间复杂度

快速排序的时间复杂度取决于待排序数据的特征。在理想的一般情况下(待排序列为全无序),其性能可以达到o(nlgn)。但是在特殊的情况下(每次排序都不能起到基本有序的目的),最坏的性能为o(n2)。由于快速排序在排序时,不是逐个进行对比的,所以实际上是不稳定的

代码实现

def Partition(arr, left, right, comp_func = lambda x, y: x < y):
    ''' divide array
    1) divide arr into two part, bigger than pivot or other
    2) regard arr[left] as pivot
    '''
    pivot = arr[right]
    tail  = left - 1
    for i in range(left, right):
        if comp_func(arr[i], pivot):
            tail += 1
            print("swap %d %d : %d %d" %(tail, i, arr[tail], arr[i]))
            arr[tail], arr[i] = arr[i], arr[tail]
            print(arr)
    tail += 1
    # this swap may caused unstable
    arr[tail], arr[right] = arr[right], arr[tail]
    return tail

def QickSort(arr, left, right):
    if left >= right:
        return
    middle = Partition(arr, left, right)
    QickSort(arr, left, middle - 1)
    QickSort(arr, middle + 1, right)

运行示例

    arr = [9, 1, 2, 5, 3, 8]
    print(arr)
    QickSort(arr, 0, len(arr)-1)

快速排序运行结果

与冒泡排序相比,快速排序一次遍历结束后,数据达到了部分有序(相对于某个元素,大于这个元素,其他元素);而性能较差的冒泡排序,每次遍历结束后,只能达到一个数字有序。
参考推荐 https://www.cnblogs.com/eniac12/p/5329396.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值