Cod sursa(job #875892)

Utilizator Daniel_BotBot Cristian Daniel Daniel_Bot Data 10 februarie 2013 21:42:50
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.76 kb
#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;
}