提纲:

1.在一次比较过程中,我们能确定位置的只有一个元素的位置,在外层循环中体现。比如说在插入排序和选择排序中,外层循环 i 就是已经排好序的元素的个数。那些大于等于 i 的当前的值的的都是等待排序的元素,也就是内层循环 j 需要处理的部分。

但是我们能使得数组中的元素“基本有序"

基于比较的排序算法,一次只能得出一个结果。最好的情况就是把问题分解成两个1/2的规模,而不是一个1/4,另一个3/4。因为你无法知道你是否处于另一个糟糕的状况之中。

因为一次比较只能得出 “大于” 或者 “小于”两个结果,所以底数为log2,而问题的所有解的规模最初是n,当第一轮排序完成后,未排序的元素是n-1个,同理,第二轮排序完成后剩下的元素是n-2个,以此类推。这种等差数列相乘用符号表示就是n!。所以基于比较的排序最好的情况就是lg(n!),近似于O(nlgn)


2.拿快速排序法举例。

快排为什么快?内循环比较移动次数少。shell排序法就是考虑到了这点元素大范围移动这点,突破O(n2)的算法

3.不是基于比较的排序,而是根据下标的排序,需要大的内存空间。

 

posted on 2012-02-16 20:37  一路转圈的雪人  阅读(295)  评论(0编辑  收藏  举报