FINDING GREATEST INTEGER IF AN ARRAY WHICH FIRST INCREASES AND THEN DECREASES.(BINARY SEARCH)
NOTE:THIS PARTICULAR PROBLEM CAN ALSO BE SOLVED WITH MERGESORT.IT WILL BE POSTED IN MY FUTURE POSTS.
#include<stdio.h>
long long function(long long *ar,long long,long long);
int main()
{
long long k;
long long ar[10]={9,10,7,6,5,4,3,2,1,0};// array which first increases then decreases
k=function(ar,0,9);//i have given function name as "function"
printf("%lld",k);
return 0;
}
long long function(long long *ar,long long l,long long r)
{
if(l==r)//if array has only one element.base case.
return ar[l];
if(l+1==r && ar[l]>ar[r])//array with two elements
return ar[r];
if(l+1==r && ar[l]<ar[r])
return ar[l];
long long mid=(l+r)/2;
if(ar[mid]>ar[mid-1] && ar[mid]>ar[mid+1])
return ar[mid];
if(ar[mid]<ar[mid+1] && ar[mid]>ar[mid-1])
return function(ar,mid+1,r);
else
return function(ar,l,mid-1);
}
NOTE:THIS PARTICULAR PROBLEM CAN ALSO BE SOLVED WITH MERGESORT.IT WILL BE POSTED IN MY FUTURE POSTS.
#include<stdio.h>
long long function(long long *ar,long long,long long);
int main()
{
long long k;
long long ar[10]={9,10,7,6,5,4,3,2,1,0};// array which first increases then decreases
k=function(ar,0,9);//i have given function name as "function"
printf("%lld",k);
return 0;
}
long long function(long long *ar,long long l,long long r)
{
if(l==r)//if array has only one element.base case.
return ar[l];
if(l+1==r && ar[l]>ar[r])//array with two elements
return ar[r];
if(l+1==r && ar[l]<ar[r])
return ar[l];
long long mid=(l+r)/2;
if(ar[mid]>ar[mid-1] && ar[mid]>ar[mid+1])
return ar[mid];
if(ar[mid]<ar[mid+1] && ar[mid]>ar[mid-1])
return function(ar,mid+1,r);
else
return function(ar,l,mid-1);
}
No comments:
Post a Comment