算法9:在一个循环有序的数组里查找一个数
2017-03-15 13:05
302 查看
解题思路
采用中分方法进行查找,考虑到是循环有序的数组,存在一边有序的情况,将中间值与最左边值比较,查看是否有序,则左有序,否则就是右有序。然后再确定待查找值的区域。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; }
相关文章推荐
- 循环有序数组查找一个数
- 在一个循环有序的数组里查找特定值
- 在一个循环有序数组里查找一个给定的值是否存在
- 【小米校招笔试】一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置
- 递增有序数组中,查找某一个数字的位置
- 设计一个模板类Sample,用于对一个有序数组采用二分法查找元素下标
- 循环数组中查找一个数
- 循环有序数组中的二分查找 Search in a rotated sorted array
- 整数型的有序递增数组循环右移x位后,查找指定整数 算法
- 使用while循环和折半法查找一个整数是否在一个排序的int类型数组中
- 一个循环合并两个有序数组
- 在一个旋转过的有序数组上实现二分查找 收藏
- 在一个升序的但是经过循环移动的数组中查找指定元素
- 在一个二维有序数组中,查找指定的数据是否存在
- 利用二分查找在循环递增数组中检索一个元素
- 部分有序中查找给定值-【百度面试题】循环有序数组的查找问题
- 利用二分查找在循环递增数组中检索一个元素
- 循环有序数组查找问题
- 有序 循环数组的二分查找
- 二分数组的扩展:二分查找循环有序数组