算法基础之快速排序

没办法,快排永远滴神

什么是快速排序

快速排序是优化过的冒泡排序,是处理大量数据排序的最优解。如果你体会过二分法查找妙处,相信你一定能很快上手快速排序,因为快速排序与二分法查找有着异曲同工之妙。

原理

在这里插入图片描述
选择一个基数,一般选择数组头,然后新建两个指针,left,right。
在这里插入图片描述
right指针下的是2比left指针下的5小,那么两个交换位置,接着left指针向右移动
在这里插入图片描述
由于1、3都比5小,直接忽略
在这里插入图片描述
此时left指针下的8比right指针下的5大,交换位置
在这里插入图片描述
接着right指针向左移动
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:指向基数的指针是不移动的
最后基数额左边全是小于基数的,基数的右边全是大于基数的。

接着递归
在这里插入图片描述
是不是很简单呢?

附上python的代码

代码

numbers=[4,5,1,21,66,6,7,9,15,44,60,16,3,77,51,13,99,52]

left=0
right=len(numbers)-1
def con(left,right):
    global numbers
    t = 1
    a=left
    b=right
    while left<right:
        if numbers[left]<numbers[right]:
            if t==1:
                right-=1
            else:
                left+=1
        elif numbers[left]>=numbers[right]:
            numbers[left],numbers[right]=numbers[right],numbers[left]
            t=1-t
            left+=1-t
    if left-a>=2:
        con(a,left-1)
    if b-right>=2:
        con(right+1,b)
con(left,right)

制图不易,点个赞支持一下吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值