算法导论学习笔记-1-基础排序算法

写在前面:

最近从头开始学习算法导论,​作为一个非计算机专业的学生,我的目的也就是为了找工作的时候能多点筹码;但是学习过程中还是有不少收获的,顺便也能练习下python编程水平,因此记录下学习内容

排序算法​种类:

第一章是算法基础,这里介绍了2种排序方法:插入排序和归并排序;例子还算比较浅显易懂。

对于插入排序,可以用一个打牌时接牌的模型来比喻:起初手里没有牌,然后拿到第一张,肯定不需要排序,接着拿到第二张,将其与第一章比较大小,如果小,就放第一张左边。接下去第三张,要与前2张进行比较,并插入合适的位置。

python代码如下:​这里应该是粘帖错了,并不是nlogn

算法导论学习笔记-1-基础排序算法

第二种是很简单常见的冒泡排序。代码如下:

算法导论学习笔记-1-基础排序算法


第二种是比以上2者都快的归并排序;代码如下:

算法导论学习笔记-1-基础排序算法


稍后将给上算法原理及代码详解

新浪博客不能po代码实在太坑爹了

对于归并排序,首先我们假设有2堆已经排序好的数组(纸牌)。那么我们得想个办法将其合并为一个顺序牌。首先将2堆牌正面放置,即每一堆都是上小下大排列。然后比较2张顶牌,取出一张小的,再比较顶牌,。。。直到有一堆牌被完全取光,那么剩下的另一堆肯定都比现有的牌大,而且他也是排序好的,只要将其全部拿过来放在后面即可。

这就是2个有序数组的合并过程。用merge(a,b)函数来表示这个过程

 

接下去就是二分递归策略,我们把待排序数组分成2份,这2份再各自分为2份。。。直到分成的数组中都只包含一个元素,如果这2份有序(显然是有序的,因为只有一个数啊),那么可以调用merge将其合并为一个。这样递归调用,如merge-sort所示。

 

小于10个则采用插入排序,这个是书上的练习题,不是原始归并排序的步骤。总结以下,在递归调用中要注意的几点:

1、分解到最底层时候的操作,如len(a)==1时,往往要单独拿出来操作,否则会无限递归下去

2、相同的操作可以使用递归,不同的操作则要单独写成一个函数,如这里的merge必须得单写一个

 

 最后上一些插图:

算法导论学习笔记-1-基础排序算法

算法导论学习笔记-1-基础排序算法


 



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值