快速排序

 快速排序

算法思想:

每次从序列中找一个元素出来,然后以该元素为标准,把序列中比该元素小的元素,放在该元素左边,比该元素大的元素放在该元素右边。然后对左右两个序列继续递归,直到左右两个序列中只剩一个元素或没有元素时

时间复杂分析:

平均是O(nlogn)  , 最坏是O(n^2)

我们可以把该算法看成一个树,按照平均来算,及每一次调用处理的数据都是n,但树的高度,与每次选取的标准元素有关,如果每次产生的左、右两个序列的元素个数相同,即树的高度是logn。那么计算得,n*logn

如果最坏:如果序列本身就是有序的,由于快排,在运行过程中不判断是否已经有序,所以每次依然会进行左右分,这样左边始终为空,右边为n-i,最终生成的树高度为n,所以n*n=n^2

下面代码中,每次把当前数组中的第一个元素作为比较的标准元素

def quickSort(arr):
    if len(arr)<=1:
        return arr
    flag=arr[0] #选取第一个元素为比较的标准
    i=1
    left = []
    right = []
    j=1
    while i<len(arr):
        if arr[i] < flag:
            left.append(arr[i])
        else:
            right.append(arr[i])
        i+=1
    return quickSort(left) + [flag] + quickSort(right)

if __name__ == '__main__':
    arr=quickSort([3,5,6,4,2,1,5,6,8])
    print(arr)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值