基本概念(下面每个算法都可点击跳转到具体的文章):
时间复杂度:
计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。
空间复杂度:
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。
排序算法的稳定性:
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
稳定的排序算法
冒泡排序、插入排序、归并排序、基数排序
非稳定的排序算法
选择排序、希尔排序、快速排序、堆排序
这里可能有些人对选择排序不是稳定的有疑问,举个例子,对数组{6, 6, 2}进行选择排序后,就会产生不稳定的新序列。
小结:
如何选择排序算法:
1.先分析是否需要稳定性的排序
2.再分析空间复杂度是否满足需求,然后选择时间复杂度相对快的
3.快速排序是大多数应用场景的首选
写在最后的:排序算法不要死记硬背复杂度如何、稳定性如何,也不需要将代码背下来,工业库已经有各种算法的实现,死记硬背没有意义。只要真正理解了算法的原理,具体问题具体分析,才能灵活运用,才真正算是学会了算法。
原文出自:http://blog.csdn.net/daiyudong2020/article/details/52566927
End;