快速排序的简单实现

       排序是日常开发中一种常见的操作,也就是对一个数列按照某种规则进行排列,下面介绍一种速度快,效率高的排序算法——快速排序
       快排的实现方式是在数列中选一个作为基准数,一般是第一个或者最后一个,然后将数列中的数一一与基数作比较分成两部分,左边比基数小,右边比基数大(这是升序,降序的话左边大,右边小),最后对左右两边分别重复上面步骤,直到两边的数列都只有一个元素或没有元素,排序结束。
       举个具体例子来看一下,有一个数组{4,3,6,5,7,2,1,8}

       第一步:选一个数为基准数(base),这里选第一个,a[0] = 4,再定义两个指针,一个在最左边(蓝色箭头),一个在最右边(橙色箭头),向中间扫描。如图


       第二步:右边指针向左扫描与基数比较,当扫描到的元素比基数小时(比基数大的不动),将右指针所对应的元素赋值给左指针对应的元素(8不动,1赋值给左指针),这时右指针移动到1的位置,停止扫描(比基数小的放做左边).


       第三步:左指针向右扫描,当扫描到的元素比基数大时(比基数小的不动),将左指针对应的元素赋值给右指针对应的元素(3不动,6赋值给右指针),这时左指针移动到6的位置,停止扫描(比基数大的放右边).


       第四步:重复二、三步骤,直到两个指针相碰,过程图如下





        到这一步可以看到左右指针相碰,然后将基数值4赋值给相碰的位置,这时候一趟排序完毕,可以看到左边都是比基数4小的数,右边都是比基数大的数,下图是经过一趟排序完毕后的数列,再对左右两边数列分别重复一二三四步骤,直到两边的数列都只有一个元素或没有元素,排序结束。


  最后附上具体代码和注释(注释写的比较详细)



代码运行效果



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值