查找与排序初步(2007-07-14).pdfVIP

  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文档。上传文档
查看更多
查找与排序初步 杭州二中 刘雨辰 Drizzlecrj modified 什么是查找,排序? n 简单地说, 找就是从一个序列中找东 西。排序就是使一个序列有序 引例1 n 给你个n个整数a1,a2..an和一个x,请你 设计一个函数,找出其中是否有一个 ai=x,如果有,函数返回i,如果没有,函 数返回-1 思路: n 将a1..an存在数组a中,将a1..an与x逐一 比较,得出结果。(当然不用数组也可以, 用一个变量保存索引即可) n 如果需要求出改值,则也可以不用数组, 直接保存该值即可。 引例2 n 给你个数列a1,a2..an,请你设计一个过 程,将这个数列从小到大排序。 思路 n 从数组中取一个最小值,放到数组头,再 从剩余数值中去最小值,不断重 这个过 程,直到没有剩余数值,则排序完成 (这就是传说中的选择排序) 推广 n 我们将类似于引例1,从一个线性表中 找一个元素的操作,称为查找 n 而类似引例2,将一个线性表排序的操 作,称为排序 线性表查找的基本方法 n 线性查找 n 二分查找 n 三分查找(n分查找) n 分块查找 线性查找(Linear Search) n 线性 找就是逐一比较 a: 2 1 7 4 10 Return 4 x :4 线性查找 n int LinearSearch(int a[], int len, int x) n { n for(int i = 0; i len; i++) n { n if(a[i] == x) n return i; n } n return - 1; //not found n } 二分查找(Binary Search) n 使用二分查找的前提条件是待 找序列有 序 n 查找方法很简单,每次将x和序列中间值 a[m]进行比较,若x=a[m],则找到,若 xa[m],则在左边序列中 找,若 xa[m],则在右边序列中查找 二分查找 a: 1 2 5 121718203537 x :5 return 5 二分查找 n int Binary_Search(int a[], int left, int right, int val) n { n int mid; n while(left = right) n { n mid = left + (right - left) / 2; n if(a[mid] == val) n return mid; n else if(val a[mid]) n left = mid + 1; n else n right = mid - 1; n } n return left; n } 三分查找(Ternary Search) n三分查找算法是用来找出如下特 征函数的最值的算法:函数需呈现 为先严格单调递增后严格单调递 减或者先严格单调递减后严格单 调递增。 问题定义 n 假设现在有函数F(x),满足先严格单调递 增,后严格单调递减。

文档评论(0)

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

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

1亿VIP精品文档

相关文档