# 排序算法总结[1]
排序算法总结[1]
标签(逗号分隔): 排序、算法、Java
计算机中最常见、最简单的算法就是排序和查找算法了,趁着找工作准备面试的机会再把这些算法总结一下,以后也方便查阅。
排序算法分类
根据待排序数据的大小,分为内部排序和外部排序。
- 如果整个排序过程在内存中即可完成不需要访问外部磁盘就,称为内部排序;
- 如果待排序序列太大,不能在内存中一次完成,称为外部排序;
常见的排序算法
- 内部排序:冒泡排序、插入排序、希尔排序、选择排序、堆排序、归并排序、快速排序等;
- 外部排序:外归并排序、外分配排序、置换选择排序;
线性排序算法
上面介绍的都是基于比较的排序算法,最佳实践复杂度是:O(NlgN),而一些特殊条件下可以使用线性排序:基数排序、计数排序和桶排序达到O(N)的时间复杂度。
排序算法的稳定性
排序算法的稳定性是一个非常重要的概念,主要指的是原本相同的元素排序完成后其相对顺序会不会发生改变。
比如:1,3,1,2,5其中2个1相对顺序不能改变这样才是稳定的。
1.稳定性的意义
如果排序算法是稳定的,那么就可以从一个键上排序,然后再从另外一个键上排序,第一个键上排序的结果可以被第二个键使用。基数排序就是这样,先按照低位排序,然后逐次高位排序,由于是稳定的,低位相同的元素在高位相同时其位置也不会发生改变的。
2.常见排序算法的稳定性
- 稳定的排序算法:冒泡、直接插入排序、归并排序、基数排序
- 非稳定的排序算法:堆排序、快排、希尔排序、直接选择排序