shouchengcheng
just do it

排序算法种类及应用场景:

插入排序  很少的元素或几乎有序的元素

堆排序   关注最坏情况

快速排序  希望能够得到一个好的平均情况下性能

桶排序   元素是从一个密集集合中抽取出

 

插入排序

它的原理其实很简单。你一定有这样的经历,你在摸牌的时候,你一定是边摸牌边理排。那么你是怎么理的呢?我是按顺序来的,摸到一张,就插到相应的位置中。这里的插入法就是这个原理。

 

堆排序

堆排序主要是将数组看成二叉树,通过二叉树的比较,每次将最大的排到最前面,然后将最大的排到最后,这样的话最大的已经排好。然后剩下的再进行递归,最后能得到有序的数据。

 

快速排序

我把它理解为中值排序的升级版,主要是中值排序是需要左右长度相等,而在快速排序中,对于左右两个数组要求没有那么高。

 

中值排序

将需要排序的数组左右等分,要求左边的值始终比最中间的值要小,右边的值始终比最中间的值要大,然后递归。

 

计数排序

用于数组很长,设为n,但是数值只有那么几个,设为m,若m<<n,那么可以用计数排序,它的复杂度为O(n)。

它先是创建一个长度为m的数组,然后进行两次遍历,在第一次遍历中,计算数值出现的次数;然后第二次是遍历新建的那个数组,利用计数值,将原来的数组重写。

 

选择排序

这是在我一开始学习c语言的时候,经常会使用的一个排序例子。不过它在这些算法中效率应该是最低的。

 

在erlang中,它对于快速排序只需要很少的语句就可以实现:

qsort([ ]) -> [ ];
qsort([ Pivot | T ]) ->
    qsort([ X || X<- Pivot, X < Pivot ])
    ++ Pivot
    ++ qsort([ X || X <- Pivot, X >= Pivot ]).

 

 

posted on 2014-03-31 18:11  shouchengcheng  阅读(445)  评论(0编辑  收藏  举报