当前课程知识点:程序设计基础 > 第五章 分治思想与递归 > 5.2 排序 > 5.2.4 快速排序——总体思路
刚才我们看到的呢是把这个数组一分为二
各自去排序
排完序再合起来
这样的话呢能够提高它排序的效率
那么实现的算法呢 我们通过递归来实现
看上去非常的清晰
那下面我们换个角度
假如 我们不是让它两个分开的子数组严格有序
而是呢 让左边这部分
和右边这部分
它们整体上左边的都比右边的小
至于说左边和右边各自是不是有序的先不管它
那么 这样子之后呢
我们就可以
把这个任务拆成让两个不同的人去做
各自去完成一部分的排序
它们互相之间不干扰
因为这些元素都比它小 右边都大
这样的话呢能够提高排序的效率
那么这样的一个方法呢
我们来看一看到底怎么来实现
首先来看
这个数组假定元素都在这里头
那么 我们以第一个元素为参照物
我们把它做了一个标记
第一个元素以它为参照物
那么很显然
有了它做标准
后面的这些元素
它其实是根据跟参照元素的大小关系
可以分成两类
一类呢是比这个参照元素要大
我们把它标成这种黄颜色
一类呢比这个参照元素小
我们把它标成这种绿色
这样呢把它数组分成了两大类别
不同的元素有的比它大
有的参照数元素比它大 有的比它小
然后 我们下面把这个元素
重新排列一下
让小的 都到左边去
它们的这个顺序可以维持不变
反正呢都放到左边
它到底是谁我们先不管它
只要是比这个参照元素小的
都放到左边去
然后是参照元素在这个中间 放着
最后呢 比参照元素大的
都放到右边去
那么这样的一个
重新排列的过程 我们不难发现
第一 这个排序的过程无论
就将来你的排序过程
无论你怎么操作
都应该不会发生左边的这个绿色的区域
这个绿色的区域
跟右边的这个黄色区域
去发生调整
也就是说不可能把这边的元素调到右边去
当然反过来也一样 对吧
第二个呢
我们原始数组的排序过程就变成了
经过这样的转换之后就变成了
对左边区域的这个元素的排序
和对右边区域的这个元素的排序
这样的两个子任务
那大家这样一看
是不是 又发现
我们对一个大数组的排序
就变成了两个对短的小数组的排序
所以 把这个任务又变成了一个新的子任务
可是 它们要完成的任务是一样的
它们的算法也是可以一样的
但是呢 它们处理的数据少了
规模缩小了
那么这样呢
我们就可以写出按照这种思想
写出一个新的排序的思路
我们有时候把这种程序呢称之为快速排序
-1.1 基础知识
-1.2 买菜问题
-1.3 数学运算
-1.4 补充说明
-1.5 总结
--1.5 总结
-程设论道
--程设论道
-师生问答
-第一章 编程初步--语法自测
-2.1 关于超级计算器的几点思考
-2.2 电子秤模拟 — 背景介绍及需求分析
-2.3 电子秤模拟 — 代码实现
-2.4 变量定义与变量类型
-2.5 猜数游戏与数据表示
-2.6 关于变量的讨论
--公告
-2.7 变量体现的计算思维
-程设论道
--程设论道
-师生问答
--师生问答
-第二章 变量与代数思维--语法自测
-3.1 谁做的好事——语义表示
-3.2 谁做的好事——真假检查
-3.3 谁做的好事——循环枚举
-3.4 谁是嫌疑犯——多重循环枚举
-3.5 谁是嫌疑犯——破案线索表示
-3.6 谁是嫌疑犯——用二进制枚举
-程设论道
--程设论道一
--程设论道二
--程设论道三
-师生问答
-第三章 逻辑推理与枚举解题--语法自测
-4.1 插花游戏
-4.2 筛法
-4.3 线性查找
-4.4 折半查找
--4.4.1 提问
-4.5 排序问题
-4.6 总结
--4.6.1 总结
-程设论道
--程设论道二:筛法
-师生问答
-第四章 筛法与查找--语法自测
-5.1 阶乘
-5.2 排序
-5.3 矩阵填充
-5.4 分书与八皇后
-5.5 青蛙过河
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答一
--师生问答二
-第五章 分治思想与递归--语法自测
-6.1 兔子数列问题
-6.2 分鱼问题
-6.3 橱窗的插花问题
-6.4 最长公共子序列问题
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第六章 递推与动态规划--语法自测
-7.1 统计记录总数
-7.2 统计活跃用户数
-7.3 统计在线时长
--7.3.2 结构
-7.4 总结
--7.4.1 总结
-程设论道
--程设论道
-师生问答
--师生问答
-第七章 文本数据处理--语法自测
-8.1 将数据组织成链表
-8.2 提高链表访问效率 —— 哈希链表
-8.3 以二进制文件存储链表
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第八章 非文本数据处理--语法自测
-9.1 自动售卖程序
-9.2 配制水果信息
-9.3 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测