Pagini recente » Cod sursa (job #5682) | Cod sursa (job #2807554) | Cod sursa (job #2895268) | Cod sursa (job #1361916) | Cod sursa (job #875892)
Cod sursa(job #875892)
#include <iostream>
#include<fstream>
#include<string>
#define N 15
using namespace std;
int midpoint(int,int);
int BinarySearch(int [],int,int,int,int);
int main()
{
freopen ("cautbin.in","r",stdin);
int n,nr,option,key;
scanf("%d",&n);
int a[N];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&nr);
for(int i=0;i<nr;i++)
{
scanf("%d",&option);
scanf("%d",&key);
printf("%d se afla pe pozitia %d\n",key,BinarySearch(a,key,0,n,option));
}
return 0;
}
int midpoint(int min,int max)
{
return (min+(max-min)/2);
}
int BinarySearch(int A[],int key,int imin,int imax,int option)
{
int k=-1;
if(option==0 || option ==1)
while (imax >= imin)
{
/* calculate the midpoint for roughly equal partition */
int imid = midpoint(imin, imax);
// determine which subarray to search
if (A[imid] <= key)
{// change min index to search upper subarray
imin = imid + 1;
k=imid+1;
}
else if (A[imid] > key)
// change max index to search lower subarray
imax = imid - 1;
}
if(option==2)
{
/*while (imax >= imin)
{
int imid = midpoint(imin, imax);
if(A[imid]==key)
k=imid+1;
if (A[imid] >= key)
{// change min index to search upper subarray
k=imid+1;
imax = imid - 1;
}
else if (A[imid] < key)
// change max index to search lower subarray
imax = imid - 1;
}
*/
for(int i=0;i<imax;i++)
if(A[i]==key)
return i+1;
}
// key not found
return k;
}