python实现快速排序算法(代码实现,详细讲解)

快速排序讲解

快速选取一个元素作为基准值(一般是选中数组中的第一个元素)将大于该基准值的元素放在数组的右边,小于基准值的元素放在数组的左边,此时完成一次排序,多次按照既定规则循环后完成排序。
(1)优先设置两个边路i和j,设置元素位置i=0,j=len(array)-1;
(2)选取第一个元素作为基准值,即base=array[i]
(3)j开始向左移动,每次移动一个元素,即j-=1,直到该元素小于基准值时停下,此时将该值赋值给array[i] 即array[i]=array[j];
(4)i开始向右移动,每次移动一个元素,即i+=1,直到该元素大于基准值时停下,此时将该值赋值给array[j],即array[j]=array[i]
(5)重复执行3/4两个步骤,直到i=j时停下,此时找到了基准的位置,即array[i]=base,到此也就是完成了一次排序。
(6)通过第一轮排序后,基准值左边的比其小,右边的比其大。然后通过递归的方式继续执行前后两半区实现最终排序。
代码实现:

def quick_sort(lis,start,end):
    # 判断start是否小于end,如果为false,直接返回
    if start < end:
        i,j=start,end
        base=lis[i]
        while i < j:
            # 如果列表后边的数比基准数要大,那么基准数向前移动一位
            while (i<j) and (lis[j] >= base):
                j = j-1
            # 否则的话,就与基准数相互交换
            lis[i]=lis[j]
            while (i<j) and (lis[i]<=base):
                i += 1
            lis[j]=lis[i]
        # 做完第一轮比较后,列表被分为了两个半区,并且i=j,此时找到基准值的位置
        lis[i]=base
        # 递归前后半区
 print(lis)
        quick_sort(lis,start,i-1)
        quick_sort(lis,j+1,end)
    return lis
lis= [7, 6, 5, 3, 12, 20, 1, 9, 11, 4, 15, 10, 8]
print(quick_sort(lis,0,len(lis)-1))

另外一种,找中间为基准
代码实现:

def quick_sort(lis):
    if len(lis)>=2:
        # 选取基准值
        pivot=lis[0]
        # 定义基准值左右两侧的列表
        left,right=[],[]
        # 从原始数组中移除基准值
        lis.remove(pivot)
        for n in lis:
            if n >= pivot:
                right.append(n)
            else:
                left.append(n)
        return quick_sort(left)+[pivot]+quick_sort(right)
    else:
        return lis
lis= [7, 6, 5, 3, 12, 20, 1, 9, 11, 4, 15, 10, 8]
print(quick_sort(lis))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值