1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lh-09 数组

数组与函数示例:arrmanip.c void ReverseIntegers( int a[], unsigned int n ) { unsigned int i; for( i = 0; i n / 2; i++ ) SwapIntegers( a, i, n - i - 1 ); } void SwapIntegers( int a[], unsigned int i, unsigned int j ) { int t; t = a[i]; a[i] = a[j]; a[j] = t; } void PrintIntegers( int a[], unsigned int n ) { unsigned int i; for( i = 0; i n; i++ ) printf( %-3d, a[i] ); printf( \n ); } 二分查找(折半查找) 若数组中元素的值是有序排列的,则可采用二分查找法查找元素,方法如下:用一对下标(称为高端下标high和低端下标low)指示出一个查找范围,由这对下标计算出中间元素的下标mid,若待查找的元素k等于中间元素的值,则查找成功;否则,根据k与之间元素值的大小关系,修改高端下标high或者低端下标low,将查找范围缩小一半。 二分查找(续) 若数组中元素的值是有序排列的,则可采用二分查找法查找元素,方法如下:用一对下标(称为高端下标high和低端下标low)指示出一个查找范围,由这对下标计算出中间元素的下标mid,若待查找的元素k等于中间元素的值,则查找成功;否则,根据k与之间元素值的大小关系,修改高端下标high或者低端下标low,将查找范围缩小一半。 6 12 23 28 31 45 51 99 0 1 2 3 4 5 6 7 low high mid=[(low+high)/2] 下标 二分查找(实例) 假设需要在8个元素的数组num中查找45是否在其中,即k=45。 6 12 23 28 31 45 51 99 0 1 2 3 4 5 6 7 low high mid 下标 k num[mid] ‖ 45 ‖ 28 二分查找(实例续) 待查找的45大于中间位置上的元素28,因此,下一步应当在后半部查找,即确定新的low和high。 6 12 23 28 31 45 51 99 0 1 2 3 4 5 6 7 low high mid 下标 k num[mid] ‖ 45 ‖ 28 low high值不变, low = mid + 1 二分查找(实例续) 待查找的45等于中间位置上的元素45,查找结束。 6 12 23 28 31 45 51 99 0 1 2 3 4 5 6 7 high mid 下标 k = = num[mid] ‖ 45 ‖ 45 low 45 如果查找不到呢? 二分查找(实例续) 待查找的元素为40。 6 12 23 28 31 45 51 99 0 1 2 3 4 5 6 7 high mid 下标 k num[mid] ‖ 40 ‖ 45 low 45 6 12 23 28 31 45 51 99 0 1 2 3 4 5 6 7 high low 45 mid 二分查找(实例续) 待查找的元素为40。 6 12 23 28 31 45 51 99 0 1 2 3 4 5 6 7 下标 45 high low Low high 结束查找 二分查找 假设需要在8个元素的数组num中查找45是否在其中,即k=45。 6 12 23 28 31 45 51 99 0 1 2 3 4 5 6 7 low high mid 下标 while (low = high) { /*查找整数k是否在数组num中*/ } mid = ( low + high ) / 2; if ( k = = num[mid]) break; else if ( k num[mid]) low = mid + 1; else high = mid - 1; scanf(“%d”,k); /*输入待查找的整数k的值*/ low = 0; high = 7; 二分查找程序 int k, num[8] = {6,12,23,28,31,45,51,99}; int low, high, mid; scanf(%d,k); low = 0; high = 7; while (low = high) { /*查找整数k是否在数组num中*/ mid = ( low + high ) / 2; if ( k == num[mi

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档