How to implement binary search and check the efficiency against sequential search in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int counter_sequential_search = 0;
int counter_binary_search = 0;
 
int main(void)
{
    int size, arr[10000], search_number;
    srand ( time(NULL) );
    size = sizeof(arr) / sizeof(int);
    
    set_randoms(arr, size);
    sort(arr, size);
        
    search_number = rand() % 100 + 1;
    if (binary_search(arr, size, search_number) != -1)
        printf("found\n");
    else
        printf("not found\n");
        
    if (sequential_search(arr, size, search_number) == 1)
        printf("found\n");
    else
        printf("not found\n");
 
    printf("counter_sequential_search = %d\n", counter_sequential_search);
    printf("counter_binary_search = %d\n", counter_binary_search);

    return 0;
}
int binary_search(int arr[], int size, int search_number)
{
    int start = 0, end = size - 1,  middle = (start + end) / 2;
 
    while (start <= end)
    {
        counter_binary_search++;
        if(arr[middle] == search_number)
           return middle;
        if(arr[middle] > search_number)
           end = middle - 1;
        else
            start = middle + 1;
        middle = (start + end) / 2;
    }
 
    return -1;
}
void sort(int arr[], int size)
{
    int i, j, tmp, swap;
    
    for(i = 0; i < size; i++)
    {
        swap = 0;
        for(j = 0; j < size - i - 1; j++)
        {
            if(arr[j] > arr[j + 1])
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
                
                swap = 1;
            }
        }
        if (swap == 0) break;
    }
}
int sequential_search(int arr[], int size, int search_number)
{
    int i;
    
    for (i = 0; i < size; i++)
    {
        counter_sequential_search++;
        if (arr[i] == search_number)
            return 1;
    }
            
    return 0;
}
void set_randoms(int arr[], int size)
{
    int i;
    
    for (i = 0; i < size; i++)
        arr[i] = rand() % 100 + 1;
}

/*
found
found
counter_sequential_search = 6463
counter_binary_search = 7

sequential search loop run 6463 times. 
binary search loop run only 7 times...
*/


answered Jul 2, 2014 by avibootz
edited Jul 2, 2014 by avibootz

Related questions

1 answer 158 views
2 answers 201 views
1 answer 178 views
1 answer 156 views
...