代码改变世界

算法与数据结构——排序(一)概述

2012-10-26 08:08  左眼微笑右眼泪  阅读(359)  评论(1编辑  收藏  举报

      最近在学习《大话数据结构》这本书,以前总是以为看懂了就以为自己明白,其实不然,等到真正叫把书本关上,要自己来写的时候,发现自己还是不会,所以在这次学习的过程中,为了达到比较好的效果,每次理解了某个算法之后,就关上书,自己来实现一遍,并且把每个算法的思路用自己的话总结出来。以此来加深自己的理解,接下来的一系列都是我在学习《大话数据结构》这本书时的笔记。之所以记录下来,一时为了加深我自己的印象,二是为了使自己养成善于总结的好习惯。因为这些内容是自己学习的一些笔记,所以在里面有很多例子都是使用的《大话数据结构》这本书上面的,请大家不要见怪。另外,其他的一些内容属于我个人的理解,如果有错误,还请大家批评指正。

     补充一句,《大话数据结构》这本书确实不错,强烈推荐!!!

     好了,闲话少说,直接入正题了。在正式学习排序之前,有一些概念我们需要理解。排序我们就不用解释了,大家都明白。排序分为两类,一种是稳定排序,另外一种是不稳定排序。什么是稳定排序呢,排序一般可以按照不同的关键字进行,比如按照关键字A,张三是排在李四前面的,而如果按照关键字B排序,张三和李四是一样的。这个时候,如果最终的结果是张三在前面,李四在后面,那么就是稳定的排序,如果张三在后面,李四在前面,那么就是不稳定的。再具体一点的例子,如果我在班上的总分成绩排名在你前面,就算我们的四级分数是一样的,最后的名次我还是在你前面,那么这就叫稳定的排序,否则就是不稳定的。

     排序按照另外一种分法可以分为内排序和外排序。内排序也就是数据比较少的时候,数字都加载到内存中去,在内存中进行的排序。外排序就是数据量非常多,每次只能加载一部分到内存中去排序,排完了之后,再从外存上加载一部分进去,它需要在内外存之间进行多次交换。

在后面学习中介绍的的都是内排序的一些算法。

     对于内排序来说,影响算法性能的关键因素有三个,一是时间,二是空间,三是算法本身的复杂度。

     时间:对于排序算法来说,时间开销是衡量它好坏的重要因素。一般排序都涉及到比较和移动两种操作。比较就是比较两个数的大小,移动就是把两个数的位置进行交换。高效率的算法应该具有较少的比较次数和较少的移动次数。

     空间,这里的空间指的是辅助空间。也就是除了装需要排序的数之外所需要的空间。这些空间一般在排序的过程中可以用到,有的时候,可以用空间来减少时间的消耗。它们之间可以相互转换,所以空间也是衡量算法好坏的一个重要因素。

     算法本身的复杂性:这里也就是从算法本身出发来说的,看你这个算法设计的合不合理,思路复不复杂。

     上面就是在学习排序算法之前,应该了解的一些内容。接下来,我将依次实现几种常见的算法。整个系列的学习将会介绍8种算法,分别是冒泡,选择,插入,希尔,归并,堆排序,快速排序,基数排序。