ithink.chan 6c4421a457 文件重命名
Signed-off-by: ithink.chan <chenyang@autoai.com>
2019-08-20 14:25:39 +08:00

39 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 4.2 排序算法
排序算法非常有用,除了用于实现类似于“按学生成绩进行排名”这种需求外,其他的一些需求和算法也往往以排序算法为基础。例如,在有序数组中进行查找,就比在无序数组中进行查找快很多,为了获得有序数组,就需要先对数组进行排序。
常见的三种排序算法为:冒泡排序、选择排序和快速排序。在讲解排序和查找等算法时,往往以数组为对象,但这些算法的应用对象并不仅限于数组。
## 4.2.1 选择排序
选择排序是最简单,也是最容易理解的排序算法。其思想是:每次都从待排序的元素中选取最大/最小的元素,加入到已排序的列表中,直到没有待排序的元素为止。
例如,将元素按从 A-Z 的顺序进行排列(假设 A<B<C...假设在排序前数组中元素分布如下
| 序号 | 0 | 1 | 2 | 3 | 4 | 5 |
|------|---|---|---|---|---|---|
| 元素 | B | E | A | F | C | D |
在排序最开始的时候选取 0 号元素 B接着将 B 与序号为 1-5 的元素进行比较 B E 进行比较时E>B因此 E 不会被选中,接着 B 与下一个元素 A 比较,由于 A<B因此 A 代替 B 被选中并将 A B 进行交换接着将 A 与后续元素进行比较在完成一轮比较和选取操作后将得到最小的元素并且已置于 0 号位置
| 序号 | 0 | 1 | 2 | 3 | 4 | 5 |
|------|---|---|---|---|---|---|
| 元素 | A | E | B | F | C | D |
接着选取 1 号元素 E E 2-5 号元素进行比较选取和交换接着从 2 号元素开始...直到没有再需要被排序的元素为止
## 4.2.2 冒泡排序
俩俩交换
## 4.2.3 快速排序
基本有序
快速排序是一种常用的排序算法比选择排序算法快例如C语言标准库中的函数 qsort 实现的就是快速排序快速排序也使用了D&C
下面来使用快速排序对数组进行排序对排序算法来说最简单的数组什么样呢还记得前一节的提示码就是根本不需要排序的数组
## 练习
编码实现快速排序算法