Sort

  在这篇博客中将对我接下来进行的, 现有的排序算法的实现做一个汇总.

  原地排序就是指不申请多余的空间来进行的排序,就是在原来的排序数据中比较和交换的排序。

1. 排序算法的性能评价

  1). 评价排序算法好坏的标准: 执行时间和所需的辅助空间.

  2). 排序算法的空间复杂度

    若排序算法所需的辅助空间并不依赖于问题的规模n,即辅助空间是O(1),则称之为就地排序(In-Place Sort).

    非就地排序一般要求的辅助空间为O(n).

  3). 排序算法的时间复杂度

    大多数排序算法的时间开销主要是关键字之间的比较和记录的移动. 有的排序算法其执行时间不仅依赖于问题的规模,

    还取决于输入实例中数据的状态.

2. 排序算法汇总: 

  为了避免本篇文章过于冗长,所以我对每一种排序算法都单独写了一篇文章.

  1). 冒泡排序: http://www.cnblogs.com/lxw0109/p/bubble-sort.html

  2). 选择排序: http://www.cnblogs.com/lxw0109/p/selection-sort.html

  3). 插入排序: http://www.cnblogs.com/lxw0109/p/insertion-sort.html

  4). 希尔排序: http://www.cnblogs.com/lxw0109/p/shell-sort.html

  5). 堆排序: http://www.cnblogs.com/lxw0109/p/heap-sort.html

3. 各种排序算法的思想太重要了,对于解决很多问题都可以借鉴.

4. 基于比较的排序算法的时间复杂度下限为nlogn

证明: 要用基于比较的方法排序 A1,A2, A3, 其实就是找到一个两两比较序列,而这些序列都是下面这个二叉树中某一个从根到

叶子的路径

            

那么基于比较的排序的时间复杂度就是这棵树的深度H(N)。而且很容易知道叶子节点的个数就是N的排列 N!, 那么我们就有 

                          2^H(N) >= N! > N*(N-1)*.....*(N/2) > (N/2)^(N/2) 

                          H(N) > (N/2)lg(N/2) = O(nlgn)             得证

  

Reference:

基于比较的排序算法的时间复杂度下限: http://blog.sina.com.cn/s/blog_48b0843d0100hb0j.html

原文地址:https://www.cnblogs.com/lxw0109/p/sort.html