您的位置:首页 > 其它

循环递增数组中查找是否存在某个数

2015-03-03 11:39 197 查看
#include <cassert>
#include <iostream>
using namespace std;
// 在循环递增数组中查看是否存在某个数
// 返回-1表示数组中没有该元素
int search(int arr[], int len, int value)
{
if(arr == NULL || len <= 0)
{
return -1;
}
int start = 0;
int end = len - 1;
while(start <= end)
{
int mid = start + (end - start >> 1);
if(value == arr[mid])
{
return mid;
}
else if(value < arr[mid]) // 值小于中间元素
{
if(arr[mid] >= arr[start]) // 中间元素在左数组
{
if(value < arr[start]) // 在右数组查找
{
start = mid + 1;
}
else // 在左数组查找
{
end = mid - 1;
}
}
else // 中间元素在右数组
{
end = mid - 1;
}
}
else // 值大于中间元素
{
if(arr[mid] >= arr[start]) // 中间元素在左数组
{
start = mid + 1;
}
else // 中间元素在右数组
{
if(value < arr[start]) // 在右数组查找
{
start = mid + 1;
}
else // 在左数组查找
{
end = mid - 1;
}
}
}
}
return -1;
}
int main(int argc, char* argv[])
{
int arr1[] = {17, 19, 20, 25, 1, 4, 7, 9};
int len = sizeof(arr1) / sizeof(int);
for(int i = 0; i < len; ++i)
{
cout << search(arr1, len, arr1[i]) << endl;
}
cout << search(NULL, 1, 0) << endl;
cout << search(arr1, 0, 7) << endl;
cout << search(arr1, len, 10) << endl;
cout << search(arr1, len, 0) << endl;
cout << search(arr1, len, 26) << endl;

return 0;
}

运行结果:

0

1

2

3

4

5

6

7

-1

-1

-1

-1

-1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  循环 递增 查找
相关文章推荐