快速排序

     快速排序作为二十世纪十大算法之一,其地位毋庸置疑,一个合格的程序员是必须要学会快速排序的,不然被人知道了可会被笑话的,学习排序,你可以先找一个乱的序列,然后按代码算法一步一步走,看着代码怎么变的,看懂了思想和实现框架结构,之后就是多熟悉几遍代码,记住关键步骤。

     思想:

         通过一趟排序将待排序列分割成两个独立的部分,以枢轴为对象,比他小的放左边,比他大的放右边,通过递归再对这两个部分继续上面的操作,一直到low = high,这样就完成了排序。

参考程序:

3.运行结果:

 

总结:快速排序其实是冒泡排序是升级,通过选取的枢轴值,将比他小的放左边,比他大的放右边,再通过交换中不断更换自己的位置,直到没有交换满足要求为止,虽然快速排序已经是在整体性能上是一个非常有效的排序算法,尤其是无序性高的处理起来有游刃有余,但其实还有改进和优化的地方,在快速排序算法中一般选取的第一个枢轴一般是第一个数,若这个数在序列中处于较大和较小的数那这个选取就不太合理会减慢运行效率,最好选取的是序列大小靠中间的位置最好,有人为此就提出三数取中法,即在前面,中间,和最后都取一个数,然后枢轴取第二大数,虽然这也会多了一个步骤,但往往在待排序列数多的情况下是有很大的效果的,这个大家可以去尝试的去感受一下,当然先把快速排序弄通再想一下这些吧!  哈哈哈。。。

最后,快速排序的在最好情况下的时间复杂度是O(n log n),最坏情况下是O(n^2).空间复杂度最优情况是O(log n),最坏情况下是O(n)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值