昨天简单学习了一下makefile和Linux下C语言编程,试了下Anjuta和Eclipse,简单说下Anjuta,建立makefile工程后还是要自己修改makefile的,我在这上面卡了不下一个小时,不过这样也好,一切都可以自己掌控,不至于像以前那么傻瓜化。
进入正题,《算法导论》第2章居然介绍排序算法,估计是想要让大家先对算法有个概念吧,一开始还纠结要不要找其他书补充一下数据结构,后来发现这里所谓排序算法只不过为了讲“增量法”和“分治法”这两种算法设计思想,所以也就释然了。
所谓增量法就是从无到有,保持现有结果正确的情况下不断增加和解决新的问题,从而得到最终的结果。好比是一支军队不断攻城拔寨,所过之处都收为我方领土;所谓“分治法”则是一条很长的战线拉下来,必须依赖军团协作,划分战区,分别包围,各个击破。
在介绍合并排序时提到一个很有用的小策略“哨兵位”,即在数组末尾增加一个不可能的值,从而可以避免检查是否已经为空(到尾部)。
关于几个排序感兴趣的可以参见http://blog.csdn.net/yexinghai/article/details/4649923。同时对几个简单排序有了点新认识,可能可以帮助刚学的进行区分:所谓插入排序是只可见已经排序的内容,每次来一个新的值并把它插入到合适的位置;所谓选择排序则是仅关心没有排序的内容,每次从中选择最大的放到已排序部分的尾部;所谓冒泡排序则是在数据上增加了窗口,每次只能看到相邻的两个值。
BSKER于2011.10.14