算法快速排序python

算法——快速排序

基本概念

归并排序:

将数组分为两数组分别排序,并将有序的数组归并使主数组有序。主要耗费的时间在合并

快速排序:

通过一个主元,使素组分为两个子数组,左子数组的值小于主元的值,右子数组的值大于 主元的值。将这两个子数组排序也就将整个数组进行了排序。主要耗费的时间在排序上。如果合并要花费大量时间,那就得不偿失了。

基本的思路

第一步
[3,1,6,2,5,8,4,7]-----------以第一个元素为主元,从第二个元素向右找第一个大于主元的元素a,从最后一个元素向前找第一个小于等于主元的元素b,交换a,b的值,继续从当前位置判断。当两个指针交错后,交换主元与b的值(最后一个小于等于主元的元素),结束本次循环。
[3,1,6,2,5,8,4,7]
[3,1,2,6,5,8,4,7]
[3,1,2,6,5,8,4,7]
[2,1,3,6,5,8,4,7]
[2,1] [3] [6,5,8,4,7]
第二步
以相同的方法继续对左右两子集进行排序
[1,2][3][6,5,4,8,7]
[1,2][3][4,5,6,8,7]
[1,2][3][4,5][6][8,7]
第三步
[1,2][3][4,5][6][7,8]

时间复杂度

O(logN)

变种的代码实现

def quickSort(num):
    if len(num)>=2:
        #取第一个数为主元作为判断点   可以取任意位置的值作为主元
        start = num[0]
        num.remove(start)
        left = []
        rigth = []
        for i in num:
            if start>i:
                #小于主元的数存左边
                left.append(i)
            else:
                #大于主元的数存右边
                rigth.append((i))
                #归并 子集
        return quickSort(left)+[start]+quickSort(rigth)
    else:
        return num
    pass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值