# 排序算法总结[1]

排序算法总结[1]

标签(逗号分隔): 排序、算法、Java


计算机中最常见、最简单的算法就是排序和查找算法了,趁着找工作准备面试的机会再把这些算法总结一下,以后也方便查阅。

排序算法分类

根据待排序数据的大小,分为内部排序和外部排序。

  1. 如果整个排序过程在内存中即可完成不需要访问外部磁盘就,称为内部排序;
  2. 如果待排序序列太大,不能在内存中一次完成,称为外部排序;

常见的排序算法

  • 内部排序:冒泡排序、插入排序、希尔排序、选择排序、堆排序、归并排序、快速排序等;
  • 外部排序:外归并排序、外分配排序、置换选择排序;

线性排序算法

上面介绍的都是基于比较的排序算法,最佳实践复杂度是:O(NlgN),而一些特殊条件下可以使用线性排序:基数排序、计数排序和桶排序达到O(N)的时间复杂度。

排序算法的稳定性

排序算法的稳定性是一个非常重要的概念,主要指的是原本相同的元素排序完成后其相对顺序会不会发生改变。
比如:1,3,1,2,5其中2个1相对顺序不能改变这样才是稳定的。

1.稳定性的意义

如果排序算法是稳定的,那么就可以从一个键上排序,然后再从另外一个键上排序,第一个键上排序的结果可以被第二个键使用。基数排序就是这样,先按照低位排序,然后逐次高位排序,由于是稳定的,低位相同的元素在高位相同时其位置也不会发生改变的。

2.常见排序算法的稳定性

  • 稳定的排序算法:冒泡、直接插入排序、归并排序、基数排序
  • 非稳定的排序算法:堆排序、快排、希尔排序、直接选择排序

排序算法时间空间复杂度总结

原文地址:https://www.cnblogs.com/lhyblog/p/sort_1.html