AI笔试面试题库-Python题目解析4_第1页
AI笔试面试题库-Python题目解析4_第2页
AI笔试面试题库-Python题目解析4_第3页
AI笔试面试题库-Python题目解析4_第4页
AI笔试面试题库-Python题目解析4_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1请用Python手写实现插入排序。解析:插入排序(Tn*r3on Sort)的工作原理是通过构建有序序列,对干未排序数据. 在已排序序列中从后向前扫描,找到相应位宜并插入。算法执行步骤:(1)从第一个元素开始.该元素可以认为已经被排序:(2)取出下一个元素,在已经排序的元素序列中从后向前扫描:(3)如果被扫描的元素(已排序)大于新元素,则将被扫描元素后移一位:(4重复步骤(3),直到找到已排序的元素小干或者等于新元素的位宜:(5)将新元素插入到该位宜后:(6)重复步骤(2) - (5) a6 5318 72 4Python实现aef insert_sort(ary):n = len (ary

2、)for i in range (1z n):if aryi temp :aryj+1) = aryj #记录待插入下标index = jelse :b reakaryindex = tempreturn ary2、请用Python手写实现快速排序。解析:步骤:(1) 从数列中挑出一个元素.称为、基准/z (pivot):(2) 重新排序数列,所有元素比基准值小的摆放在基准前面.所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后.该基准就处于数列的中间位宜。这个称为分区(partition)操作:(3) 递归地(recursive)把小于基准值元素的子数列和大于基准

3、值元素的子数列排序。换言之快速排序时基于分治模式处理的,对一个典空子数组r排序的分治过程为三个步骤:(1) 分解:Ap. .r被划分为俩个(可能空)的子数组入【p . .q-1和Ag+1 使得Ap .q-1 = Aq = Aq+1 .r;(2解决:通过递归调用快速排序,对子数组Ap . .q-1和Aq+丄r排序:(3)合并。QUICKSORT(Af p, r)1 if p r2 then q - PARTITION (Az pz r)/关键3 QUICKSORT(A, pr q - 1)4 QUICKSORT(A, q + lr r) 数组划分快速排序算法的关键是P典RTTT工ON过程,它对A

4、p.r进行就地重排:PARTITION(Af p, r)1x Ar2i P13forj 一 Pto r - 14do ifA j x5then i i + 17 exchange Ai + 1 Ar8 return i + 1下图是一个例子6 5 318 7 2 4这是另外一个可视化图Python实现def quick_sort (ary):return qsortfaryzOentary) -1)def qsortfaryleft,right):#快排函数.azy为待排序数组,left为待排序的左边界.right为右边界if left = right : return arykey = ar

5、y left#取最左边的为基准数lp = left芒左指针rp = right#右指针while lp = key and lp rp :rp while arylp = key and Ip end : breakif child+1 = end and arychild arychila+1:打取较大的子节点 child = child+1#较大的子节点成为父节点if aryroot arychild :#交换aryrootarychild = arychildz aryrootroot = childelse :break4、请用Python手写实现归并排序。解析:归并排序是采用分治法的

6、一个非常典型的应用。归并排序的思想就是先递归 分解数组,再合并数组。先考虑合并两个有序数组.基木思路是比较两个数组的最前面的数.谁小就 先取谁,取了后相应的抬针就往后移一位。然后再比较,直至一个数组为空, 最后把另一个数组的剩氽部分复制过來即可。再考虑递归分解.基木思路是将数组分解成和right,如果这两个数组 内部数据是有序的,那么就可以用上面合并数组的方法将这两个数组合并排 序。如何让这两个数组内部是有序的?可以再二分,直至分解出的小组只含 有一个元素时为止,此时认为该小组内部已有序。然后合并排序相邻二个小 组即可。6 5 3 1 8 7 2 4Python实现 def merge_sort(ary):if len (ary) = 1 : return arynum = int (len (ary) /2)#二分分解left = merge_sort(ary:num) right = merge_sort(arynum:)def merge(leftz right):1 r 合并操作,将两个有序数组left和right 合并成一个大的有序数组1 1#left与right数组的下标抬针lfr = 0,0result =)while 15、请创建一个函数检査一个词是否具

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论