快速排序的详解。

LeetCode217,这道题我们先要将其进行排序,升序或降序均可。但是我们要是用最简单的冒泡排序的话,我们会超时。这时候我们就要用到快速排序。现在我先大致介绍下快速排序!

快速排序:

       我们都知道,冒泡排序每次是对相邻的两个进行比较,而快速排序是从两端进行排序;

假设现在有一列数据要进行排序,

首先要先选择一个基准,这个基准是随意选,但是平时为了方便,我们选择第一个数作为基准 

这里我们选择6为基准,那么我们开始找哨兵(哨兵A和B),这里在你写代码的时候可以用i和j。

A向左进行查找大于基准数,B向右查找小于基准数,每次都是B先开始。 

(1)哨兵A找到7,哨兵B找到5

现在进行将哨兵A和哨兵B的值进行交换。

(2) 交换后,继续进行查找:

进行交换:

(3)交换后,依旧往后进行查找

 现在哨兵AB在3的位置碰见了,那么下一个基准值就变为3,而6填到原来3的位置。

(4)现在以6为分界线,分成左边是小于6,右边是大于6 ,然后分开来进行排序,这里只拿左边为例。

哨兵B先往左找不到小于3的,哨兵A往右找不到大于3的,最后在2处碰见,那么就与2进行交换。 

与基准6一样,接下来先对3的左侧进行排序,然后是右侧,最后接下来时6的右侧。 (4)对3的右侧进行排序。 

 (5)对6的右侧也进行类似排序,最后的结果是:

其实快速排序就是为了将基准放到对应的位置。

代码:

若有错误,请指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值