Given an array of n distinct integers sorted in ascending order, write a function that returns a Fixed Point in the array, if there is any Fixed Point present in array, else returns -1. Fixed Point in an array is an index i such that arr[i] is equal to i. Note that integers in array can be negative.
Variation:
Find MagickNumber With Duplicate Numbers in Sorted Array 2. Where a magick number is number[i] =i
-10,-5,2,2,2,2,4,7,9,12,13
Method:
First check whether middle element is Fixed Point or not. If it is, then return it; otherwise check whether index of middle element is greater than value at the index. If index is greater, then Fixed Point(s) lies on the right side of the middle point (obviously only if there is a Fixed Point). Else the Fixed Point(s) lies on left side.
Code:
Time Complexity: O(Logn)
Variation:
Find MagickNumber With Duplicate Numbers in Sorted Array 2. Where a magick number is number[i] =i
-10,-5,2,2,2,2,4,7,9,12,13
Method:
First check whether middle element is Fixed Point or not. If it is, then return it; otherwise check whether index of middle element is greater than value at the index. If index is greater, then Fixed Point(s) lies on the right side of the middle point (obviously only if there is a Fixed Point). Else the Fixed Point(s) lies on left side.
Code:
int
binarySearch(
int
arr[],
int
low,
int
high)
{
if
(high >= low)
{
int
mid = (low + high)/2;
/*low + (high - low)/2;*/
if
(mid == arr[mid])
return
mid;
if
(mid > arr[mid])
return
binarySearch(arr, (mid + 1), high);
else
return
binarySearch(arr, low, (mid -1));
}
/* Return -1 if there is no Fixed Point */
return
-1;
}
int
main()
{
int
arr[10] = {-10, -1, 0, 3, 10, 11, 30, 50, 100};
int
n =
sizeof
(arr)/
sizeof
(arr[0]);
printf
(
"Fixed Point is %d"
, binarySearch(arr, 0, n-1));
getchar
();
return
0;
}
No comments:
Post a Comment