ai笔试面试题库-python题目解析4.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1>请用Python手写实现插入排序。 解析: 插入排序(Tn*r3on Sort)的工作原理是通过构建有序序列,对干未排序数据. 在已排序序列中从后向前扫描,找到相应位宜并插入。 算法执行步骤: (1) 从第一个元素开始.该元素可以认为已经被排序: (2) 取出下一个元素,在已经排序的元素序列中从后向前扫描: (3) 如果被扫描的元素(已排序)大于新元素,则将被扫描元素后移一位: (4〉重复步骤(3),直到找到已排序的元素小干或者等于新元素的位宜: (5) 将新元素插入到该位宜后: (6) 重复步骤(2) - (5) a 6 5 3 1 8 7 2 4 Python实现 aef insert_sort(ary): n = len (ary) for i in range (1z n): if ary[i] ary[i-1]: temp = ary[i] 亦待插入的下标 index = i #从—1循环到0 (包括0) for j in ran今亡(i?l.,: if ary[j] temp : ary[j+1) = ary[j] #记录待插入下标 index = j else : b reak ary[index] = temp return ary 2、请用Python手写实现快速排序。 解析: 步骤: 从数列中挑出一个元素.称为、、基准/z (pivot): 重新排序数列,所有元素比基准值小的摆放在基准前面.所有元素比基准值 大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后.该基 准就处于数列的中间位宜。这个称为分区(partition)操作: 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。 换言之 快速排序时基于分治模式处理的, 对一个典空子数组???r]排序的分治过程为三个步骤: 分解: A[p. .r]被划分为俩个(可能空)的子数组入【p . .q-1]和Ag+1 ???使得 A[p ..q-1] = A[q] = A[q+1 ..r]; (2〉解决:通过递归调用快速排序,对子数组A[p . .q-1]和A[q+丄??r]排序: (3)合并。 QUICKSORT(Af p, r) if p r then q - PARTITION (Az pz r) //关键 QUICKSORT(A, pr q - 1) QUICKSORT(A, q + lr r) 数组划分 快速排序算法的关键是P典RTTT工ON过程,它对A[p..r]进行就地重排: PARTITION(Af p, r) 1 x — A[r] 2 i — P?1 3 for j 一 P to r - 1 4 do if A[ j ] £ x 5 then i — i + 1 exchange A[i + 1] - A[r] return i + 1 下图是一个例子 6 5 3 1 8 7 2 4 这是另外一个可视化图 Python实现 def quick__sort (ary): return qsortfaryzO^entary) -1) def qsortfary^left,right): #快排函数.azy为待排序数组,left为待排序的左边界.right为右边界 if left = right : return ary key = ary [left] #取最左边的为基准数 lp = left 芒左指针 rp = right #右指针 while lp rp : while ary[rp] = key and lp rp : rp while ary[lp] = key and Ip rp : Ip += 1 ary[lp]z ary[rp] = ary[rp]z ary[lp] ary[left],ary[lp] = ary[lp]zary[left] qsort(ary,left,lp-1) qsortfaryxrp + l^ right) return ary 3、请用Python手写实现堆排序。 解析: 堆排序在top K问題中使用比较频繁。堆排序是采用二叉堆的数据结构來 实现的,虽然实质上还是一维数组。二叉堆是一个近似完全二叉树o 二叉堆具有以下性质: 父节点的惟值总是大于或等干(小于或等于)任何一个子节点的键值。 每个节点的左右子树都是一个二叉堆(都是最大堆或最小堆)。 步骤: (1) 构造最大堆(Buil6_MaN_H2p):若数组下标范鬧为0~n,考虑到单?独一个 元素是大根堆,则从下标n/2开始的元素均为大根堆。于是只要从开 始,向前依次构造大根堆.这样就能保证,构造到某个节点时.它的左右 子树都已经是大根堆。 (2) 堆排序(Heapsort):由于堆是用数组模拟的。得到一

文档评论(0)

yuxiufeng + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档