插入、归并排序 《算法导论》

来源:互联网 发布:软件著作权申请八戒 编辑:程序博客网 时间:2024/05/22 14:24

        题记:作为一个自动化专业的学生,毕业之后从事编程的工作,从C,linux开始,慢慢进入编程的世界,这方面知识的欠缺,靠书籍来弥补,但已不能如学生时代有大量的时间来学习,借此博客来鞭策自己不断学习,持之以恒。

        《算法导论》  插入排序

 

========================>          正文    <============================

       插入排序:对于少量元素,插入算法是一个有效的算法。《算法导论》中关于插入排序的介绍非常形象,内容如下:

       “插入排序的工作方式,像许多人排序一手扑克牌。开始时,左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。”因此拿在手上的牌就是排好的,而桌子上的就是未排序的部分。以下代码为C实现。

     

      归并排序:“分治法的思想,将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解--《算法导论》”

      下面程序实现了插入排序和归并排序,插入排序函数为insert_sort,需要注意的地方就是构建已排好序数组的起始位置。归并排序外部调用的函数为merge_sort,但内部有两个版本的细节实现,一个没有哨兵值,一个有,可以看到拥有这个值,大大简化了代码和调试,我首先写的是merge函数,程序功能出错也是在判断两个子数组谁先结束的问题上。所以如果调用时可以设置这个“无穷大”的值,还是设置为好。

 

 
0 0
原创粉丝点击