2020-05-18

c++排序算法总结:
一、算法概述
0.1 算法分类十种常见排序算法可以分为两大类:
非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。
线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。
2020-05-18
0.2 算法复杂度
2020-05-18
0.3 相关概念
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数

二、sort排序
1.sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考虑。
2.sort函数的模板有三个参数:
void sort(RandomAccessIteratorfirst,
RandomAccessIterator last, Compare comp);
(1)第一个参数first:是要排序的数组的起始地址。(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)。
(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是升序。
3.实例
2020-05-18
2020-05-18
2020-05-18
三、冒泡排序
1.基本思路
升序:每次将相邻的两个数比较,将小的调到前面。
降序:每次将相邻的两个数比较,将大的调到前面。
2020-05-18
四、选择排序
1.基本思路
升序:找出所有数中的最小数,将最小数和未排序的第一位数替换
降序:找出所有数中大最大数,将最大数和未排序的第一位数替换
2020-05-18