八大排序算法
时间复杂度:时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。通常测试输入值大小趋近无穷时的情况。
空间复杂度:空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。
稳定:比如:a=b,排序前a在b前面,排序后a仍然在b前面
不稳定:比如:a=b,排序前a在b前面,排序后a和b的前后不确定
内排序:所有排序操作都在内存中完成,内排序是外排序的基础
外排序:外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。
算法名(可跳转) | 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 排序方法 | 稳定性 |
---|---|---|---|---|---|---|
冒泡排序 | O(n2) | O(n) | O(n2) | O(1) | 内模式 | 稳定 |
选择排序 | O(n2) | O(n2) | O(n2) | O(1) | 内模式 | 不稳定 |
插入排序 | O(n2) | O(n) | O(n2) | O(1) | 内模式 | 稳定 |
希尔排序 | O(n log n) | O(n log2 n) | O(n2) | O(1) | 内模式 | 不稳定 |
归并排序 | O(n log n) | O(n log n) | O(n log n) | O(n) | 外模式 | 稳定 |
快速排序 | O(n log n) | O(n log n) | O(n2) | O(log n) | 内模式 | 不稳定 |
基数排序 | O(n*k) | O(n*k) | O(n*k) | O(n+k) | 外模式 | 稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 内模式 | 不稳定 |
- 每个人所写的排序算法可能有不同的时间复杂度
n:数据规模;k:桶的个数