Skip to content

Commit

Permalink
Merge pull request WebClub-NITK#444 from geekgeekvm/master
Browse files Browse the repository at this point in the history
Fibonacci Search
  • Loading branch information
MJ10 authored Oct 16, 2017
2 parents 82d9259 + ff0076a commit 0fa0bda
Showing 1 changed file with 63 additions and 0 deletions.
63 changes: 63 additions & 0 deletions Fibonacci_Search/geekgeekvm.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#include <stdio.h>

int min(int x, int y) { return (x<=y)? x : y; }


int fibMonaccianSearch(int arr[], int x, int n)
{

int fibMMm2 = 0; // (m-2)'th Fibonacci No.
int fibMMm1 = 1; // (m-1)'th Fibonacci No.
int fibM = fibMMm2 + fibMMm1; // m'th Fibonacci


while (fibM < n)
{
fibMMm2 = fibMMm1;
fibMMm1 = fibM;
fibM = fibMMm2 + fibMMm1;
}

int offset = -1;


while (fibM > 1)
{
int i = min(offset+fibMMm2, n-1);


if (arr[i] < x)
{
fibM = fibMMm1;
fibMMm1 = fibMMm2;
fibMMm2 = fibM - fibMMm1;
offset = i;
}


else if (arr[i] > x)
{
fibM = fibMMm2;
fibMMm1 = fibMMm1 - fibMMm2;
fibMMm2 = fibM - fibMMm1;
}


else return i;
}

if(fibMMm1 && arr[offset+1]==x)return offset+1;

return -1;
}

int main(void)
{
int arr[] = {10, 22, 35, 40, 45, 50, 80, 82,
85, 90, 100};
int n = sizeof(arr)/sizeof(arr[0]);
int x = 85;
printf("Found at index: %d",
fibMonaccianSearch(arr, x, n));
return 0;
}

0 comments on commit 0fa0bda

Please sign in to comment.