读书人

数据结构温习之【排序】

发布时间: 2013-09-10 13:42:18 作者: rapoo

数据结构复习之【排序】

排序:对一序列对象根据某个关键字进行排序;


稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;

不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;

内排序:所有排序操作都在内存中完成;

外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;

排序耗时的操作:比较、移动;

排序分类:

(1)交换类:冒泡排序、快速排序;此类的特点是通过不断的比较和交换进行排序;

(2)插入类:简单插入排序、希尔排序;此类的特点是通过插入的手段进行排序;

(3)选择类:简单选择排序、堆排序;此类的特点是看准了再移动;

(4)归并类:归并排序;此类的特点是先分割后合并;

历史进程:一开始排序算法的复杂度都在O(n^2),希尔排序的出现打破了这个僵局;

以下视频是Sapientia University创作的,用跳舞的形式演示排序步骤,这些视频就可以当作复习排序的资料~

冒泡排序视频:http://v.youku.com/v_show/id_XMzMyOTAyMzQ0.html

选择排序视频:http://v.youku.com/v_show/id_XMzMyODk5MDI0.html

插入排序视频:http://v.youku.com/v_show/id_XMzMyODk3NjI4.html

希尔排序视频:http://v.youku.com/v_show/id_XMzMyODk5MzI4.html

归并排序视频:http://v.youku.com/v_show/id_XMzMyODk5Njg4.html

快速排序视频:http://v.youku.com/v_show/id_XMzMyODk4NTQ4.html


上面介绍的排序算法都是基于排序的,还有一类算法不是基于比较的排序算法,即计数排序、基数排序


预备:最简单的排序


此种实现方法是最简单的排序实现;

缺点是每次找最小值都是单纯的找,而没有为下一次寻找做出铺垫;

算法如下:

  • 索引

    1

    2

    3

    4

    5

    6

    7

    8

    9


    此时,如果increment=3,则i%3相等的索引为一组,比如索引1,1+3,1+3*2

    一般增量公式为:increment = increment/3+1;

    算法实现如下:


  • 不稳定排序算法,是简单选择排序的改进版;

    思想:构建一棵完全二叉树,首先构建大根堆,然后每次都把根节点即最大值移除,并用编号最后的节点替代,这时数组长度减一,然后重新构建大根堆,以此类推;

    注意:此排序方法不适用于个数少的序列,因为初始构建堆需要时间;

    算法实现如下:








  • 总结:每个排序都有每个排序的优点,我们需要在适当的时候用适当的算法;

    比如在基本有序、数组规模小时用直接插入排序;

    比如在大数组时用快速排序;

    比如如果要想稳定性,则使用归并排序;



    摘录维基百科图片:

    数据结构温习之【排序】




    数据结构温习之【排序】


  • 读书人网 >编程

    热点推荐