C++实现旋转数组的二分查找
本文实例讲述了C++实现旋转数组的二分查找方法,分享给大家供大家参考。具体方法如下:
题目要求:
旋转数组,如{3,4,5,1,2}是{1,2,3,4,5}的一个旋转,要求利用二分查找查找里面的数。
这是一道很有意思的题目,容易考虑不周全。这里给出如下解决方法:
#include<iostream>
usingnamespacestd;
intsequentialSearch(int*array,intsize,intdestValue)
{
intpos=-1;
if(array==NULL||size<=0)
returnpos;
for(inti=0;i<size;i++)
{
if(array[i]==destValue)
{
pos=i;
break;
}
}
returnpos;
}
intnormalBinarySearch(int*array,intleftPos,intrightPos,intdestValue)
{
intdestPos=-1;
if(array==NULL||leftPos<0||rightPos<0)
{
returndestPos;
}
intleft=leftPos;
intright=rightPos;
while(left<=right)
{
intmid=(right-left)/2+left;
if(array[mid]==destValue)
{
destPos=mid;
break;
}
else
if(array[mid]<destValue)
{
left=mid+1;
}
else
{
right=mid-1;
}
}
returndestPos;
}
introtateBinarySearch(int*array,intsize,intdestValue)
{
intdestPos=-1;
if(array==NULL||size<=0)
{
returndestPos;
}
intleftPos=0;
intrightPos=size-1;
while(leftPos<=rightPos)
{
if(array[leftPos]<array[rightPos])
{
destPos=normalBinarySearch(array,leftPos,rightPos,destValue);
break;
}
intmidPos=(rightPos-leftPos)/2+leftPos;
if(array[leftPos]==array[midPos]&&array[midPos]==array[rightPos])
{
destPos=sequentialSearch(array,size,destValue);
break;
}
if(array[midPos]==destValue)
{
destPos=midPos;
break;
}
if(array[midPos]>=array[leftPos])
{
if(destValue>=array[leftPos])
{
destPos=normalBinarySearch(array,leftPos,midPos-1,destValue);
break;
}
else
{
leftPos=midPos+1;
}
}
else
{
if(array[midPos]<=array[rightPos])
{
destPos=normalBinarySearch(array,midPos+1,rightPos,destValue);
break;
}
else
{
rightPos=midPos-1;
}
}
}
returndestPos;
}
intmain()
{
//intarray[]={3,4,5,1,2};
//intarray[]={1,2,3,4,5};
//intarray[]={1,0,1,1,1};
//intarray[]={1,1,1,0,1};
//intarray[]={1};
//intarray[]={1,2};
intarray[]={2,1};
constintsize=sizeofarray/sizeof*array;
for(inti=0;i<=size;i++)
{
intpos=rotateBinarySearch(array,size,array[i]);
cout<<"find"<<array[i]<<"at:"<<pos+1<<endl;
}
for(inti=size;i>=0;i--)
{
intpos=rotateBinarySearch(array,size,array[i]);
cout<<"find"<<array[i]<<"at:"<<pos+1<<endl;
}
}
希望本文所述对大家C++算法设计的学习有所帮助。
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下