算法排序问题实验报告.docVIP

  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、直接插入排序算法思想 直接插入排序的基本思想是将一个记录插入到已排好序的序列中,从而得到一个新的, 记录数增 1 的有序序列。 直接插入排序算法的伪代码称为 InsertionSort,它的参数是一个数组 A[1..n],包含了 n 个待排序的数。用伪代码表示直接插入排序算法如下: InsertionSort (A) for i←2 to n do key←A[i] //key 表示待插入数 //Insert A[i] into the sorted sequence A[1..i-1] j←i-1 while j0 and A[j]key do A[j+1]←A[j] j←j-1 A[j+1]←key 快速排序算法思想 快速排序算法的基本思想是,通过一趟排序将待排序序列分割成独立的两部分,其中一 部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达 到整个序列有序。 假设待排序序列为数组 A[1..n],首先选取第一个数 A[0],作为枢轴(pivot),然后按照下述原则重新排列其余数:将所有比 A[0]大的数都排在它的位置之前,将所有比 A[0]小的数都排在它的位置之后,由此以 A[0]最后所在的位置 i 作为分界线,将数组 A[1..n]分成两个子数组 A[1..i-1]和 A[i+1..n]。这个过程称作一趟快速排序。通过递归调用快速排序,对子数组A[1..i-1]和 A[i+1..n]排序。 一趟快速排序算法的伪代码称为 Partition,它的参数是一个数组 A[1..n]和两个指针 low、high,设枢轴为 pivotkey,则首先从 high 所指位置起向前搜索,找到第一个小于pivotkey 的数,并将其移到低端,然后从 low 所指位置起向后搜索,找到第一个大于 pivotkey 的数,并将其移到高端,重复这两步直至 low=high。最后,将枢轴移到正确的位置上。用伪代码表示一趟快速排序算法如下: Partition ( A, low, high) A[0]←A[low] //用数组的第一个记录做枢轴记录 privotkey←A[low] //枢轴记录关键字 while lowhigh //从表的两端交替地向中间扫描 while lowhigh A[high]=privotkey do high←high-1 A[low]←A[high] //将比枢轴记录小的记录移到低端 while lowhigh A[low]=pivotkey) do low←low+1 A[high]←A[low] //将比枢轴记录大的记录移到高端 A[low]←A[0] //枢轴记录到位 return low //返回枢轴位置 算法的理论分析 1. 直接插入排序算法理论分析 从空间来看,直接插入排序只需要一个数的辅助空间;从时间来看,直接插入排序的基 本操作为:比较两个关键字的大小和移动记录。先分析一趟直接插入排序的情况。伪代码 InsertionSort 中 while 循环的次数取决于待插入的数与前 i-1 个数之间的关系。若 A[i]A[0],则在 while 循环中,待插入数需与有序数组 A[1..i-1]中 i-1 个数进行比较,并将 A[i-1]中 i-1 个数后移。则在整个排序过程(进行 n-1 趟插入排序)中,当待排序数组中数按非递减有序排列时,则需进行数间比较次数达最小值 n-1,数不需要移动;反之,当待排序数组中数按非递增有序排列时,总的比较次数达最大值(n+2)(n-1)/2,数移动的次数也达到最大值(n+4)(n-1)/2。 若待排序数组是随机的,即待排序数组中的数可能出现的各种排序的概率相同,则我们可取 上述最小值和最大值的平均值,作为直接插入排序时所需进行数间的比较次数和数的移动次 数,约为 n^2/4。 因此直接插入排序算法,在最佳情况下的时间复杂度是 O(n),在最坏情况下的时间复杂度为 O(n^2)。 2. 快速排序算法理论分析 下面我们来分析快速排序的平均时间性能。 假设 T(n)为对 n 个记录 A[1..n]进行快速排序所需时间,则由算法 QuickSort 可见: 其中,Tpass(n)为对 n 个记录进行一趟快速排序 Partition(A,1,n)所需的时间,从一 趟快速排序算法可见,其和记录数 n 成正比,可以用 cn 表示(c 为某个常数);T(k-1)和 T (n-k)分别为对 A[1..k-1]和 A[k+1..n]中记录进行快速排序 QuickSort(A,1,k-1)和 QuickSort(A,k+1,n)所需时间。假设待排序列中记录是随机排列的,

文档评论(0)

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

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

1亿VIP精品文档

相关文档