目录
前言
排序是我们很早就学的一个几个东西了,虽然说都没什么用,但还是要总结的对不对。于是我开心地开启了放水之旅。
选择排序
§思想
不断从无序序列中找出最小的一个,加入有序序列中。
§分析
特点:
- 慢(平均时间复杂度O(
n2
))
- 没什么用(一般不会用到这种排序方法)
- 不稳定
- 代码太长(相比STL的sort)
(似乎都是缺点。。。来几个优点吧)
- 简单
- 不用思考
- 容易理解
- 一点都不难
(这是不是应该算一个优点啊)
冒泡排序
§思想
重复交换相邻的两个反序元素,最终成为正序。
§分析
特点:
- 慢(平均时间复杂度O(
n2
))
- 没什么用(一般不会用到这种排序方法)
- 不!稳定
- 代码太长(相比STL的sort)
- 简单
- 不用思考
- 容易理解
- 一点都不难
(你一定没有发现相比选择排序的§分析,我只是加了一个标点符号)
插入排序
§思想
把无序数列一个个放到有序数列的相应位置。
§分析
- 慢(平均时间复杂度O( n2 ))
- 没什么用(一般不会用到这种排序方法)
- 不!稳定
- 代码太长(相比STL的sort)
- 简单
- 不用思考
- 容易理解
- 一点都不难
(你一定没有发现相比冒泡排序的§分析,我什么都没有改动) - 类似某些人玩牌时整理手中纸牌的过程。
(还是改一下下吧)☝
插排的师傅希尔排序
§思想
分组插入排序
§分析
- 慢(平均时间复杂度O( n2 ))
- 没什么用(一般不会用到这种排序方法)
- 不稳定
- 代码太长(相比STL的sort)
- 没有其他算法那么有名(或许事实不是这样,反正我是这么认为的)
快速排序
§思想
将要排序的数据分割成一部分比另一部分都要小的两部分,然后左右各自递归调用。
§分析
- 快(平均时间复杂度O(nlogn)
- 简单
- 不用思考
- 容易理解
- 一点都不难
- 不稳定
归并排序
§思想
二路归并排序:将数列两两归并,然后再次两两归并直到有序为止二路归并排序。
§分析
- 较快(平均时间复杂度O(nlogn))
- 不!稳定
- 代码太长(相比STL的sort)
- 简单
- 不用思考
- 容易理解
- 一点都不难
- 求逆序对思想
- 比较有用
比快排还快的桶排序
§思想
似乎有点不好说啊,那就不说了。
§分析
- 快(时间复杂度O(n))
- 简单
- 容易实现
- 代码较短
- 不用思考
- 容易理解
- 常用
- 使用有范围(数,实数,有理数,整数,非负数,不能太大)
- 让快速排序颜面扫地.(同在排序家族,抬头不见低头见的,何必呢!)
堆排序
§思想
利用堆这种数据结构所设计的一种排序算法。
§分析
- 不稳定
- 比较快(平均时间复杂度O(nlogn))
- 代码太长(相比STL的sort)
- 简单
- 不用思考
- 容易理解
- 一点都不难
我们最常用的排序 迷之微笑
§实现
(§思想和§分析被§实现篡位了)
#include<algorithm>
using namespace std;
void s6o6r6t6(int a[],int f,int l)
{
sort(a+f,a+l+1);
}
本文最有用的一段话, 快来看啊! 快来看啊! 快来看啊! 快来看啊! 快来看啊! 快来看啊! 快来看啊! 快来看啊!
本篇文章或许会出现各种各样奇葩的错误。
如果读者能理解我,请点个赞,谢谢。
如果读者不能理解我,我相信点了赞之后你还是不能理解我,为了让你养成不忘初心的好习惯,请点个赞,谢谢。