排序引言
为什么排序算法很重要?
有效的排序算法在一些算法(例如搜索算法与合并算法)中是重要的(引自维基百科),个人觉得排序后就可以使用万能的对分检索啦!(排序算法是许多算法的选决条件)
怎样衡量一个排序算法的优劣?
1、时间复杂度(最好情况,最差情况,平均情况 :O(f(n))描述)
2、空间复杂度(占用的 附加存储 :O(f(n))描述)
3、稳定性(即有 相等值 时,排序前后是否会影响 相等值 的顺序,1 若不影响为稳定,2 若影响为不稳定)
4、复杂性(实现难易程度:1 易,2 难)
注:O(f(n)) 描述由好到坏依次为—— O(1) > O(log*n) > O(log n) > O[(log n)^c] > O(n) > O(n log n) > O(n^2) > O(n^c) > O(c^n) > O(n!)
符号
|
名称
|
---|---|
O(1)
|
常数(阶,下同)
|
O(log*n)
|
迭代对数
|
O(log n)
|
对数
|
O[(log n)^c]
|
多对数
|
O(n)
|
线性,次线性
|
O(n log n)
|
线性对数,或对数线性、拟线性、超线性
|
O(n^2)
|
平方
|
O(n^c),Integer(c>1)
|
多项式,有时叫作“代数”(阶)
|
O(c^n)
|
指数,有时叫作“几何”(阶)
|
O(n!)
|
阶乘,有时叫做“组合”(阶)
|
我怎样表达一个已经理解的算法?
1、为什么要用它?(它的好处或优点)
2、它的效果是什么样的?(原理)
3、怎样实现它? (想马上看代码的同学点这里,一般用Java实现)
我找到的排序算法
1、直接插入排序