Python语言实用教程第9章 数据结构与操作.pptVIP

Python语言实用教程第9章 数据结构与操作.ppt

  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文档。上传文档
查看更多
9.2.2 排序 常用的排序算法有如下8种,它们分别为: 选择排序、冒泡排序、插入排序、归并排序、快速排序、堆排序、基数排序、希尔排序等。 9.2.2 排序 1、选择排序 基本思想:选择排序的思想非常直接,就是从所有序列中先找到最小(或最大)的,然后放到第一个位置。之后再看剩余元素中最小(或最大)的,放到第二个位置……以此类推,经过n-1趟选择排序得到有序结果(设n为元素个数,下同)。可以看到,选择排序是固定位置找元素。平均时间复杂度为 O(n2)。 9.2.2 排序 2、冒泡排序 基本思想:它的思路是两两向后比较,重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序不符合排序要求就交换过来。走访数列一趟至少排定一个元素,重复进行直到没有再需要交换的,至多n-1趟。算法平均时间复杂度为:O(n2)。 9.2.2 排序 3、插入排序 基本思想:插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n2)。 9.2.2 排序 4、归并排序 基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并过程:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。 9.2.2 排序 5、快速排序 基本思想:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。 快速排序的时间复杂度:最理想O(nlogn)、最差O(n2)。 9.2.2 排序 6、堆排序 堆排序的思想:将一个无序序列调整为一个堆,就可以找出这个序列的最大值(或最小值),然后将找出的这个值交换到序列的最后一个,这样有序序列元素就增加一个,无序序列元素就减少一个,对新的无序序列重复这样的操作,就实现了排序。时间复杂度为:O(nlogn)。 9.2.2 排序 7、基数排序 基本思想:基数排序(Radix Sort)属于“分配式排序”(Distribution Sort),又称“桶子法”(Bucket Sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,其时间复杂度为O(nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。 9.2.2 排序 8、希尔排序 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。希尔排序也称递减增量排序算法,是插入排序的一种更高效的改进版本。 希尔排序是基于插入排序的以下两点性质而提出改进方法的:1)插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;2)但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。希尔排序每次以一定步长进行排序。 算法平均时间复杂度为:O(nlogn)、最差为O(ns),1s2。 9.3 应用实例 【例9-12】 利用数列产生并输出杨辉三角形。 分析:可以采用二维或一维数列来存放杨辉三角形的每行,并根据上下行元素间的关系,利用a[i][j]=a[i-1][j-1]+a[i-1][j]或一维时a[j]=a[j-1]+a[j]来产生新行的非1元素。 方法1——利用二维数组。 方法2——利用一维数组。 9.3 应用实例 【例9-13】 输入一个数,要求按已有顺序(小到大)将它插入数组中。 l = [0,10,20,30,40,50] print(The sorted list is:,l); cnt = len(l) n = int(input(Input a number:)); l.append(n) for i in range(cnt): if nl[i]: for j in range(cnt,i,-1): l[j] = l[j-1] l[i] = n; break print(The new sorted list is:,l) * * * * * * * *

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档