// Efficient Code
import java.util.*;
import java.io.*;
class GFG
{
static int bSearch(int arr[], int low, int high, int x)
{
if(low > high)
return -1;
int mid = (low + high) / 2;
if(arr[mid] == x)
return mid;
else if(arr[mid] > x)
return bSearch(arr, low, mid - 1, x);
else
return bSearch(arr, mid + 1, high, x);
}
static int search(int arr[], int x)
{
if(arr[0] == x) return 0;
int i = 1;
while(arr[i] < x)
i = i * 2;
if(arr[i] == x) return i;
return bSearch(arr, i / 2 + 1, i - 1, x);
}
public static void main(String args[])
{
int arr[] = {1, 2, 3, 40, 50};
int x = 4;
System.out.println(search(arr, x)); // OUTPUT : -1
}
}
// Naive Code
import java.util.*;
import java.io.*;
class GFG
{
static int search(int arr[], int x)
{
int i = 0;
while(true)
{
if(arr[i] == x) return i;
if(arr[i] > x) return -1;
i++;
}
}
public static void main(String args[])
{
int arr[] = {1, 2, 3, 5, 5};
int x = 4;
System.out.println(search(arr, x)); // OUTPUT : -1
}
}