算法——排序——快速排序

快速排序:

1.原地排序

2.O(nlogn)(最坏O(n^2) 这也是严重缺点之一)

3.要尽量保证输入的元素是基本无序的,因为在有序情况下,其时间复杂度是O(n^2)

4.不稳定

5.与归并排序一样是分治法的经典算法

Code:

class Sort:

    @classmethod
    def sort(cls, arr):
        cls.sortQuick(arr, 0, len(arr) -1)

    @classmethod
    def sortQuick(cls, arr, lo, hi):
        if lo >= hi:
            return
        p = cls.position(arr, lo, hi)
        cls.sortQuick(arr, lo, p)
        cls.sortQuick(arr, p+1, hi)

    @classmethod
    def position(cls, arr, lo, hi):
        v = arr[lo]
        i = lo
        j = hi
        while True:
            while i < hi and arr[i] <= v:
                i += 1
            while j > lo and arr[j] >= v:
                j -= 1
            if i >= j:
                break
            else:
                arr[i], arr[j] = arr[j], arr[i]
        arr[lo], arr[j] = arr[j], arr[lo]
        return j


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值