Can someone please have a look and help me on making this Binary Search algorithm work. Donmt know what is wrong with it .

``````#include <stdio.h>
#include <stdlib.h>
#include <time.h>

enum SearchResult {FOUND, NOT_FOUND};

SearchResult binarySearch(int array[], int key, int low, int high,  int *comparisons);
void fill_array(int array[], int sizeOfData);

const int RANGE = 200; // random data used in range 0-199

int main()
{
const int arraySize = 100;
int a[arraySize];
FILE *resultsFile;
resultsFile = fopen("bsrch.dat", "w");  // open the file lsrrch.dat for writing ("w")

if (resultsFile != NULL)      // file successfully opened
{
// seed the random number generator so it gives different
// random numbers each time
srand ( time (0) );

printf ("Found\t Data Size\t Comparisons Needed\n"  );
//\t puts in a tab character, \n a new line
fprintf (resultsFile, "Data Size\t Comparisons Needed\n"  );

fill_array(a, arraySize);
// Generate table for data of different sizes
// giving number of comparisons each time

for (int datasize = 1; datasize <= arraySize; datasize = datasize + 1)
{
int count = 0;  // number of comparisons this time
SearchResult result; // result of this search
int searchKey = rand() % RANGE;

result = binarySearch(a, searchKey, 0, datasize -1, &count);
if (result == FOUND)
printf("KEY FOUND \t");
else

// print results in a table
printf("%d  \t\t\t  %d\n", datasize, count);
fprintf(resultsFile, "%d  \t\t\t  %d\n", datasize, count);
}
}
else
fprintf(resultsFile, "File not opened\n");

fclose(resultsFile); return 0;
}

// generate  data in range 0-200  by doubling position and fill the
// array with it up to the given size

void fill_array(int array[], int sizeOfData)
{

for (int counter = 0; counter < sizeOfData; counter++)
{
array[counter] = counter * 2;
}
}

// A binary search function that returns the number of comparisons
// made call by value as well as a direct indication of found or not.

SearchResult binarySearch(int array[], int key, int low, int high, int * comparisons)
{
int mid;

*comparisons = *comparisons + 1;  //about to do a comparison

if (low > high) return NOT_FOUND;

mid = (low + high) / 2;

if (array[mid] == key)
return FOUND;     // Key found!
else if (key < array[mid])
return binarySearch(array, key, low, mid-1, comparisons);
else
return binarySearch(array, key, mid+1, high, comparisons);

}``````

Well, if you don't know what is wrong with it, you can't expect anyone else to know what is wrong with it. What problem is it giving you, specifically? It compiles and runs just fine for me, and it even seems to be able to find keys.

-Fredric

thats exactly it whenever i compile it , it keeps giving errors.

thats exactly it whenever i compile it , it keeps giving errors.

If its only compilation problem then its compiling fine on both DEV C++ and VC++ 6.0.....What compiler are you using??....didn't read your code(maybee there are some logical errors but no compilation error)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.18 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.