为了以防万一有人想不开想手撕快排呢?比如我。

通过快排来理解二分思想

什么是快排?

快排的思想不难,理解好递归很重要。

什么是递归?

递归,就是在运行的过程中调用自己。
构成递归需具备的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
什么是二分?

“一尺之捶,日取其半,万世不竭” 相信你不陌生吧?这是来自《庄子·天下》中惠施的一句名言。说的就是二分(有的时候不得不感慨古人的智慧啊!)
将一项大任务,不断自截两半,调用相同的处理函数分别处理,截到什么时候呢?截到可以解决这个问题为止。

快排的思想

很多时候我们使用二分法,并不知道它的最小单位是多少,为什么会对这个最小的没有感觉呢?
因为我们需要关注的不过三个点,首,尾,和我们要取到的中点。假设这个中点为i,下次递归就是lefti-1i+1right
搞清楚这三个点之后,具体分到多小了,就不是那么重要了。
接下来我们要关注的就是“退出” 的时机。在快排里,当首尾指针相遇,就是我们该停止的时候。在代码里体现是:

if (l > r)
{return;
}

其中l是左指针,r是右指针。


C语言实现快排

#include<stdio.h>int a[100], n;void quicksort(int l, int r)
{int i, j, t, temp;if (l > r){return;}temp = a[l];//基准数i = l;j = r;while (i != j){while (a[j] >= temp && i < j){j--;}while (a[i] <= temp && i < j){i++;}if (i < j){t = a[i];a[i] = a[j];a[j] = t;}}a[l] = a[i];a[i] = temp;quicksort(l, i - 1);quicksort(i + 1, r);
}int main()
{int i, j, t;scanf("%d", &n);for (i = 1; i <= n; i++){scanf("%d", &a[i]);}quicksort(1, n);for (i = 1; i <= n; i++){printf("%d ", a[i]);}return 0;
}/*
11
6 2 1 7 9 3 4 5 10 8 5
*/

运行结果:

[C] [二分] C语言实现快速排序相关推荐

  1. c语言快速排序案例,什么是快速排序?C语言数组快速排序例子

    快速排序(Quick Sort)是一种有效的排序算法.虽然算法在最坏的情况下运行时间为O(n^2),但由于平均运行时间为O(nlogn),并且在内存使用.程序实现复杂性上表现优秀,尤其是对快速排序算法 ...

  2. 用数据结构c语言写成绩排序,C语言数据结构 快速排序实例详解

    C语言数据结构 快速排序实例详解 一.快速排序简介 快速排序采用分治的思想,第一趟先将一串数字分为两部分,第一部分的数值都比第二部分要小,然后按照这种方法,依次对两边的数据进行排序. 二.代码实现 # ...

  3. c语言实现快速排序函数

    c语言实现快速排序 众所周知,快速排序在排序算法中时间复杂度较为低,为O(nlogn),而选择,冒泡等排序的时间复杂度均为O(n^2). 所以,现在我们来用c语言实现快速排序算法. 代码如下: #in ...

  4. 快速排序c语言实现,快速排序的C语言代码实现

    快速排序实质上是对"冒泡排序"的一种改进,整个排序过程可概括为:通过N趟的排序将原本的排序数据分为若干块进行分块排序,而在每趟排序过程中,以指定的关键字将待排数据分别分为比关键字大 ...

  5. Go语言编程:Go语言实现快速排序算法

    前言 今天用Go语言实现下经典排序算法--快速排序算法.主要是学习了Go语言,得用它来干点事情嘛,就用快速排序来练手.在Go语言语法方面,主要用到 切片数组,for循环(Go语言没有while循环), ...

  6. C语言-排序-快速排序-qsort<stdlib.h>

    想到排序,大多数人第一个想到的都是冒泡排序,今天介绍一种函数,叫快速排序qsort函数,在讲这个函数之前,先将冒泡排序(数字)的代码给大家,如果想排序字符串,请大家使用strcmp函数即可 这是C语言 ...

  7. C语言之——快速排序qsort库函数的讲解

    qsort函数C语言编译器函数库自带的排序函数,也叫快速排序函数.之前我写过一篇关于冒泡排序的代码讲解,大家感兴趣的话可以先看一看我对于冒泡排序的讲解. 相比较于冒泡排序,快速排序可以用更加快捷的速度 ...

  8. C语言qsort快速排序函数详解

    直接进入主题,在c语言中qsort函数是用来快速排序的,qsort有4个参数,分别是数组地址,数组元素个数,数组元素字节大小和一个比较数组元素的函数指针.让我来看一下官方给出的使用标准,上图: 让我们 ...

  9. C语言实现快速排序法(分治法)

    title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true --- 算法原理 分治法的基本思 ...

最新文章

  1. 利用commons-fileupload 上传图片(包含表单数据)
  2. Sql Server 监控 Job 执行情况
  3. Ajax乱码解决方案
  4. python 多进程与多线程配合拷贝文件目录
  5. Linux系统开机自启流程
  6. 4 种方法!检查字符串是否为合法的日期格式
  7. 微软开源软件特征源码分析工具 Application Inspector
  8. oracle 12 跟踪,Oracle 12C 块修改跟踪(Block chage tracking) 功能
  9. 2022低压电工考试题及答案
  10. 用Python玩玩OSMnx包获取道路数据并可视化分析
  11. ZZULIOJ 1035: 分段函数求值 (Java)
  12. python怎么撤销_用Python玩转微信(三)—— 查看撤回消息
  13. Gluster管理命令的总结与归纳
  14. python你已经是个成熟的软件了_支付宝改自己还花呗表情包_你已经是个成熟的软件系列表情包大全_游戏吧...
  15. 线性插值、抛物插值、Lagrange插值 | Lagrange拉格朗日插值法(一)
  16. 《C++ Primer》 chapter 15 TextQuery
  17. (二)地理信息中对地球的描述-地球的大地水准面、地球椭球体、大地基准面
  18. html手机和电脑端网页效果相同,关于手机网页和电脑网页相同内容会不会重复收录的问题...
  19. 段码液晶显示屏为什么要开模呢?
  20. ROS参数服务器(参数使用详细介绍)

热门文章

  1. 你听说过反摩尔定律吗?
  2. 2022-2028年中国数字乡村建设深度调研及投资前景预测报告
  3. C++核心编程(四)--文件操作
  4. 解决Pycharm中SystemError报错
  5. jieba中文分词源码分析(四)
  6. 机器学习PAL数据预处理
  7. 使用TENSORRT和NVIDIA-DOCKER部署深部神经网络
  8. CVPR2020 论文解读:少点目标检测
  9. 时间和邮箱的正则表达式,获取当前时间函数
  10. Python:数据集成