在排序数组中查找特定条件数值的程序总结
2013-08-08 13:56
309 查看
int find(int b, int e,int value)
1.在数组num的下标范围b,e,查找num[i]<= value 的最大i
int findpm(int b,int e,int value){ int id = b-1;//Attention int mid; while(b<=e){ //ATTENTION <= mid = (b+e)>>1; if(num[mid]<=value){ id = mid; b = mid+1; }else{ e = mid-1; } } return id; }
关键部分在于
if(num[mid]<=value){ id = mid; b = mid+1;while(b<=e)的终止条件要有=,因为id标记的是num[mid]<=value的mid,随着mid的往右不断移动来得到满足条件的id,考虑这个情况:
num[b]=value, j>b时,num[j]>num[b], 如果 while(b<e)来终结的话,在循环中num[mid]一直大于value,直到b==e终止,返回id = b-1.显然错啦。
用while(b<=e)来终止的话,循环到b==e时,
mid = (b+e)>>1
=> mid == b
=> num[mid]==value
=> id = mid
=> b = mid+1;
=> b>e
终止循环,返回id = b;
这样的程序对于不同情况的结果
1)value < num[b]
也就是num数组从b到e范围内不存在<=value的元素,返回b-1;2) num数组从b到e范围内存在多个比value小的元素,不存在等于value的元素
返回比value小的最大的num[id]3) num数组从b到e范围内存在多个等于value的元素
返回等于value的最大的num[id]相关文章推荐
- 数组的添加、删除、排序、与字符串之间的转换、截取、查找、遍历操作总结!!!
- 找到一个乱序数组排序后某一特定数值首次和末次出现的位置
- 程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】
- 大数组查找排序总结
- 在排序数组中查找和为给定值的两个数字--总结
- 黑马程序员 java基础 函数 数组 查找与排序总结
- 数组的几种常见排序方式总结(Java程序)
- 完成一个排序,求最大最小值,和查找数组元素的程序
- java小程序——给数组随机赋值,查找输入的值以及冒泡和选择排序数组并输出
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- 按照数组的形式排序+条件切换切换查询
- 【Java】数组的排序和查找
- (算法:二分查找)在排序数组中,找出给定数字出现的次数
- 对排序的总结&&二分查找
- c# 程序设计及应用教程上机A.2.4————数组排序和计算练习(Console)
- 排序,查找,qsort和bsearch的简单总结,scanf字符串截取
- 数组多重筛选条件排序方法
- 102.数组排序方法总结和NSComparisonResult
- 数组的排序和查找
- 数组多重筛选条件排序方法,外加一些简单常用的数组方法