快速排序法

快速排序法

快速排序的平均效率为O(n * long n),最坏的情况为O(n^2),这和之前的选择排序法效率快很多,但也有局限性。

快速排序法

假设有2个数组,一个数组为空,另外一个为1,[_,1],那么排序就知道返回的是1,没有可比性,那如果有3个都有值的数组呢?

[3,2,1] [ 3 , 2 , 1 ]

那么我们取中间的 2为比较量,把小于2的放在左边,把大于2的放在右边。那么就行成了外部有序的数组,内部是无序的。什么意思呢?

整体看是从小到大的顺序排列,而内部顺序还未排序
[  [无序(小于2的数组)] 2 [无序(大于2的数组)]    ]

就是这个意思,那么快速排序法就是将多个元素的数组,一直筛选到没有可比性为止。

代码

python

def quicksort(array):
    if len(array)<2:
        return array
    else:
        index=math.ceil((len(array) - 1) / 2)
        piovt=array[index]
        #选出大于piovt的值
        greater=[i for i in array if i > piovt]
        #选出小于piovt的值
        less=[i for i in array if i < piovt]
        #选出等于piovt的值
        center=[array[i] for  i in range(0,len(array)) if array[i]==piovt and i!=index]
        return  quicksort(less) + [piovt]+ center +quicksort(greater)


if __name__ == '__main__':
    print(quicksort([5,3,3,2,12,3,5]))

输出结果:[2, 3, 3, 3, 5, 5, 12]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值