博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小米笔试:循环排序数组二分查找
阅读量:4204 次
发布时间:2019-05-26

本文共 1063 字,大约阅读时间需要 3 分钟。

和一般的排序数组二分查找类似,下面这个链接中有详细讨论。

大体思路如下:

如果arr[mid]==num,直接返回。

如果左边有序(有序与否只需检查左端点是否小于等于右端点,下同)且num在左边范围(检查是否在左右端点的数值之间,下同),则在左边找;

如果右边有序且num在右边范围,则在左边找;

如果左边无序,则在左边找;(分析:左右两边肯定至少有一边是有序的,这时左边无序,则右边肯定有序,而且前面的判断(第二个)说明不在右边,所以肯定在左边)
如果右边无序,则在右边找;
代码如下:

#include 
using namespace std;int cbs(int arr[], int beg, int end, int num){ if(end - beg == 1) { if(arr[beg] == num) return beg; if(arr[end] == num) return end; return -1; } int mid = (beg + end) / 2; if(arr[mid] == num) return mid; if(arr[beg] <= arr[mid - 1] && num >= arr[beg] && num <= arr[mid - 1]) //left { return cbs(arr, beg, mid - 1, num); } if(arr[mid + 1] <= arr[end] && num >= arr[mid + 1] && num <= arr[end]) { return cbs(arr, mid + 1, end, num); } if(arr[beg] > arr[mid - 1]) return cbs(arr, beg, mid - 1, num); if(arr[mid + 1] > arr[end]) return cbs(arr, mid + 1, end, num);}int circularbinarysearch(int arr[], int len, int num){ return cbs(arr, 0, len - 1, num);}int main(){ int arr[] = {13,14,15,16,17,1,2,3,4,5,6,7,8,9,10,11,12};//1: 5 int len = sizeof(arr) / sizeof(arr[0]); cout<

转载地址:http://dxxli.baihongyu.com/

你可能感兴趣的文章
LoadRunner性能测试培训大纲
查看>>
LoadRunner测试J2ME的Socket程序
查看>>
《QTP自动化测试实践》要出第二版了!
查看>>
用LoadRunner开发开心网外挂
查看>>
QTP测试.NET控件CheckedListBox
查看>>
使用QTP的.NET插件扩展技术测试ComponentOne的ToolBar控件
查看>>
用上帝之眼进行自动化测试
查看>>
为LoadRunner写一个lr_save_float函数
查看>>
PrefTest工作室全新力作-《性能测试与调优实战》课程视频即将上线
查看>>
质量度量分析与测试技术 培训大纲
查看>>
欢迎加入【亿能测试快讯】邮件列表!
查看>>
为什么我们的自动化测试“要”这么难
查看>>
LoadRunner性能脚本开发实战训练
查看>>
测试之途,前途?钱途?图何?
查看>>
测试设计与测试项目实战训练
查看>>
HP Sprinter:敏捷加速器
查看>>
单元测试培训PPT
查看>>
adb常用命令
查看>>
通过LR监控Linux服务器性能
查看>>
通过FTP服务的winsockes录制脚本
查看>>