特性: in-place sort(不占用额外内存或占用常数的内存):插入排序、选择排序、冒泡排序、堆排序、快速排序。 out-place sort:归并排序、计数排序、基数排序、桶排序。
当需要对大量数据进行排序时,in-place sort就显示出优点,因为只需要占用常数的内存。 设想一下,如果要对10000个数据排序,如果使用了out-place sort,则假设需要用200G的额外空间,则一台老式电脑会吃不消,但是如果使用In-place sort,则不需要花费额外内存。
stable sort:插入排序、冒泡排序、归并排序、计数排序、基数排序、桶排序。 unstable sort:选择排序、快速排序、堆排序。
为什么要考虑排序算法的稳定性?: 稳定性:通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。
同时使用多种排序方法 基数排序关于稳定性参考: http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html
1. 从数列中找到最大的数,与数组的最末位置的数交换 2. 未排序数列形成子数列,重复 1 步
时间复杂度: 最好情况时间:O(n^2)。交换0次 最坏情况时间:O(n^2)。交换N次 稳定性:不稳定 in-place sort
冒泡:相邻元素做比较;左大于右?交换 最大的数被交换到未排序数列的最右边
时间复杂度: 最好情况(正序)时间:O(n^2)。(n+(n-1)+(n-2)+…+2+1) 最坏情况(反序)时间:O(n^2)。 稳定性: 稳定 in-place sort
将一个数值插入到一个已经排好序的数列中; 开始:一个元素(有序数列)
时间复杂度: 最好情况(正序)时间:O(n)。 最坏情况(反序)时间:O(n^2)。(1+2+3+…+n-1) 稳定性: 稳定 in-place sort 在线排序 适用于:少量元素的数组
参考: 1. 选择合适的排序函数: http://blog.csdn.net/banzhiyu/article/details/1589619 2. 稳定性排序和不稳定性排序: http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html 3. 常见排序算法: http://blog.csdn.net/whuslei/article/details/6442755 4. 九大排序算法再总结 http://blog.csdn.net/xiazdong/article/details/8462393