排序算法一直是c语言重点,各个算法适应不用的环境,同时,在面试时,排序算法也是经常被问到的。今天我们介绍下快速排序,简称就是快排。

1.快速排序思想:

快排使用 分治法 (Divide and conquer)策略,将一个序列分为两个子序列。(快排算法中使用到了递归,对递归不太熟的,可以参考我前一篇文章)。具体步骤如下:

① 从数列中挑出一个元素,称为"基准"(Pivot);

② 重新排序数列,所有元素比基准小的摆放在最前面,所有元素比基准值大的放在基准的后面(相同的数可以放在任意一边)。在这个分区结束之后,该基准就处于数列的中间位置。如上操作便称为"分区(Partition)"操作。

③ 递归的把小于基准值元素的子数列和大于基准值的子数列排序。

2.快速排序注意点:

①递归的最底部情形,是数列的大小是0或1,也就是永远都已经被排序好了。

②虽然一直会递归,但是不用担心,这个算法总会结束。毕竟在每次迭代中,至少会把一个元素摆到它最后的位置去。

③ 快排时间复杂度为:O(nLog n);

3.快速排序代码实现:

① 数据结构部分:

 

② 快速排序递归部分:

 

③寻找"基准"部分:

 

④ main函数调用:

 

如果你也想学计算机编程的话!

可以来我的C语言/C++编程学习基地,【点击进入】

还有免费(零基础教程,项目实战教学视频)!

涉及:游戏开发、课程设计、常用软件开发、编程基础知识、黑客等等...

和志同道合的小伙伴们一起学编程吧!

 

 

4.代码实现结果:

 

每天进步一点点,每天消化一点点。如果你有更好的想法,欢迎一起交流。如果文章对你有所帮助,点个赞呗。

最新文章

  1. Android Studio单元测试入门
  2. python装饰器初探
  3. 转:Oracle中merge into的使用
  4. android 之 Crash信息的持久化处理
  5. homework-03 图形化化最大子序列和
  6. 优化tomcat——jvm
  7. Celery Flower监控,完美搞定
  8. XML约束图解
  9. ios 读取通讯录数据
  10. postgres-xl 集体搭建
  11. django加密解密api
  12. MySQL表结构变更,不可不知的Metadata Lock
  13. zabbix 监控 redis
  14. 使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一)
  15. Python描述符(__get__,__set__,__delete__)简介
  16. 原生YII2 增删改查的一些操作(非ActiveRecord)
  17. WebApi全局异常处理方式
  18. 阅读Hibernate框架Session接口的源码的笔记
  19. 使用es6总结笔记
  20. Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块

热门文章

  1. git多账号使用
  2. JVM-虚拟机执行子系统
  3. centos7新增用户并授权root权限、非root用户启动tomcat程序
  4. burpsuite破解版2.0.11下载和部署
  5. docker的使用场景和背景了解
  6. dubbo学习(九)dubbo监控中心
  7. 目标检测:SSD算法详解
  8. Win10安装Ubuntu子系统
  9. 渗透测试之信息收集(Web安全攻防渗透测试实战指南第1章)
  10. Windows下设置Mongodb用户名密码