//Order of Magnitude
//O(1)
//O(log n)
//O(n)
int a[10]={0,1,2,3,4,5,6,7,8,9};
///Constant time - O(1) - perform the same amount of work regardless of the size of the input set n.
int findfirst(int n){
int ret=-1;
ret=a[0];
return ret;
}
int findlast(int n){
int ret=-1;
ret=a[n];
return ret;
}
//Logarithmic time- O(log n) -work performed is proportional to the lg base 2 of the size of the input set n.
int findnth_ver2(int n,int x){
int ret=-1;
int i,mid=0,high=0,low=0;
high=n-1;
while(low <= high){
mid=(low+high)/2;
if( a[mid] < x )
low=mid+1;
else if (a[mid] > x)
high=mid-1;
else
return mid;
}
return ret;
}
// Linear time - O(n)-work performed is proportional to the size of the input set n.
int findnth_ver1(int n,int x){
int ret=-1;
int i;
for (i=0;i < n;i++)
if(a[i]==x){
ret=i;
break;
}
return ret;
}
int main(){
int n=10;
printf("\n Find first : %d",findfirst(0));
printf("\n Find last : %d",findlast(n-1));
printf("\n Find nth ver1: %d",findnth_ver1(n,5));
printf("\n Find nth ver2: %d",findnth_ver2(n,5));
}