# C++ Program to Search Sorted Sequence Using Divide and Conquer with the Aid of Fibonacci Numbers

C++Server Side ProgrammingProgramming

#### C in Depth: The Complete C Programming Guide for Beginners

45 Lectures 4.5 hours

#### Practical C++: Learn C++ Basics Step by Step

Most Popular

50 Lectures 4.5 hours

#### Master C and Embedded C Programming- Learn as you go

66 Lectures 5.5 hours

In this C++ program we implement a Divide and Conquer approach using Fibonacci numbers. Using Fibonacci numbers, we calculate mid of data array to search the data item. The time complexity of this approach is O(log(n)).

## Algorithm

Begin
Assign the data to the array in a sorted manner.
Take input of the element to be searched.
Call FibonacciSearch() function.
Calculate the mid value using ‘start+fib[index-2]’ expression.
If the chosen item is equal to the value at mid index, print result and return to main.
If it is lesser than the value at mid index, proceed with the left sub-array.
If it is more than the value at mid index, proceed with the right sub-array.
If the calculated mid value is equal to either start or end then the item is not found in the array.
End

## Example Code

#include<iostream>
using namespace std;
void FibonacciSearch(int *a, int start, int end, int *fib, int index, int item) {
int i, mid;
mid = start+fib[index-2];
if(item == a[mid]) {
cout<<"\n item found at "<<mid<<" index.";
return;
} else if(item == a[start]) {
cout<<"\n item found at "<<start<<" index.";
return;
} else if(item == a[end]) {
cout<<"\n item found at "<<end<<" index.";
return;
} else if(mid == start || mid == end) {
return;
} else if(item > a[mid])
FibonacciSearch(a, mid, end, fib, index-1, item);
else
FibonacciSearch(a, start, mid, fib, index-2, item);
}
main() {
int n, i, fib, a={3, 7, 55, 86, 7, 15, 26, 30, 46, 95};
char ch;
fib = 0;
fib = 1;
i = 1;
while(fib[i] < 10) {
i++;
fib[i] = fib[i-1] + fib[i-2];
}
up:
cout<<"\nEnter the Element to be searched: ";
cin>>n;
FibonacciSearch(a, 0, 9, fib, i, n);
cout<<"\n\n\tDo you want to search more...enter choice(y/n)?";
cin>>ch;
if(ch == 'y' || ch == 'Y')
goto up;
return 0;
}
}

## Output

Enter the Element to be searched: 26
item found at 6 index.
Do you want to search more...enter choice(y/n)?y
Enter the Element to be searched: 45
Do you want to search more...enter choice(y/n)?n