算法9:在一个循环有序的数组里查找一个数
来源:互联网 发布:机器码算注册码软件 编辑:程序博客网 时间:2024/04/30 03:10
解题思路
采用中分方法进行查找,考虑到是循环有序的数组,存在一边有序的情况,将中间值与最左边值比较,查看是否有序,则左有序,否则就是右有序。然后再确定待查找值的区域。
c++代码
//loopBuffer:循环有序数组//length:循环有序数组长度//value:待查找的数//return:返回待查找数在数组中的位置int BinarySearch(int* loopBuffer,int length, int value){ if(loopBuffer == NULL || length == 0) { cout<<"buffer is error"<<endl; return -1; } int left = 0; int right = length -1; int mid = (left+right)/2; while(left <= right) { mid = (left+right)/2; if(value == loopBuffer[mid]) { return mid; } if(loopBuffer[left]<loopBuffer[mid])//左有序 { if(loopBuffer[left]<= value && value <= loopBuffer[mid]) { right = mid - 1; } else { left = mid +1; } } else //右有序 { if(loopBuffer[mid] <= value && value <= loopBuffer[right]) { left = mid+1; } else { right = mid-1; } } } return -1;}
测试代码
int _tmain(int argc, _TCHAR* argv[]){ int loopBuffer[10] = {6,7,8,9,0,1,2,3,4,5}; int i = 0; int value = 0; while(i < 10) { cout<<"please input a value in {6,7,8,9,0,1,2,3,4,5}:"<<endl; cin>>value; cout<<"pos = "<<BinarySearch(loopBuffer,10,value)<<endl; i++; } cout<<"please input a value not in {6,7,8,9,0,1,2,3,4,5}:"<<endl; cin>>value; cout<<"pos = "<<BinarySearch(loopBuffer,10,value)<<endl; return 0;}
0 0
- 算法9:在一个循环有序的数组里查找一个数
- 在一个循环有序的数组里查找特定值
- 在一个循环有序数组里查找一个给定的值是否存在
- 循环有序数组查找一个数
- 在一个旋转有序数组中,查找最小的数
- Search for a Range 有序数组里查找一个数的出现区间 @LeetCode
- 03+在一个有序的二维数组中查找一个数
- 二分法在有序数组中查找一个数
- 二维有序数组查找一个数
- 在循环升序数组中查找一个数
- 在一个两段有序的数组中查找
- 在有序递增数组中查找一个缺少的数字
- 在一个有序的旋转数组中,查找给定值
- 算法题27 在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
- 循环数组中查找一个数
- 折半查找,把一个数放到一个有序数组的对应位置
- 在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
- 在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
- 学习了手机长按弹出框的功能
- ffmpeg--h264帧内解码
- Popwindow中弹出软键盘后挡住Pop问题
- 结构体内存对齐
- 第一篇:介绍iOS连接外设的方式以及选择蓝牙4.0的原因
- 算法9:在一个循环有序的数组里查找一个数
- 【Leetcode】最小 subsetsum
- Online Caisno Malaysia iBET Live Casino Rebate 0.75% Unlimited(iBET Live Casino, Live Casino Rebate,
- Cocoapods搭建私有库
- 2017.3.9 Harry and Christmas tree 失败总结
- BZOJ3812 主旋律
- 游戏数值策划入门介绍
- C# 子线程调用主线程窗体的解决方法
- New Year Snowmen CodeForces