n^2表示n的平方,选择排序有时叫作直接选择排序或简单选择排序算法
排序方法 | 平均时间 | 最好时间 | 最坏时间 |
桶排序(不稳定) | O(n) | O(n) | O(n) |
基数排序(稳定) | O(n) | O(n) | O(n) |
归并排序(稳定) | O(nlogn) | O(nlogn) | O(nlogn) |
快速排序(不稳定) | O(nlogn) | O(nlogn) | O(n^2) |
堆排序(不稳定) | O(nlogn) | O(nlogn) | O(nlogn) |
希尔排序(不稳定) | O(n^1.25) | ||
冒泡排序(稳定) | O(n^2) | O(n) | O(n^2) |
选择排序(不稳定) | O(n^2) | O(n^2) | O(n^2) |
直接插入排序(稳定) | O(n^2) | O(n) | O(n^2) |
O(n)这样的标志叫作渐近时间复杂度,是个近似值.各类渐近时间复杂度由小到大的顺序以下数组
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)spa
通常时间复杂度到了2^n(指数阶)及更大的时间复杂度,这样的算法咱们基本上不会用了,太不实用了.好比递归实现的汉诺塔问题算法就是O(2^n)..net
平方阶(n^2)的算法是勉强能用,而nlogn及更小的时间复杂度算法那就是很是高效的算法了啊.排序
冒泡排序,简单选择排序,堆排序,直接插入排序,希尔排序的空间复杂度为O(1),由于须要一个临时变量来交换元素位置,(另外遍历序列时天然少不了用一个变量来作索引)递归
快速排序空间复杂度为logn(由于递归调用了) ,归并排序空间复杂是O(n),须要一个大小为n的临时数组.索引
基数排序的空间复杂是O(n),桶排序的空间复杂度不肯定ci
全部排序算法中最快的应该是桶排序(不少人误觉得是快速排序,实际上不是.不过实际应用中快速排序用的多)但桶排序通常用的很少,由于有几个比较大的缺陷.get
1.待排序的元素不能是负数,小数.table
2.空间复杂度不肯定,要看待排序元素中最大值是多少.
所须要的辅助数组大小即为最大元素的值.