Binary search is a popular method of searching in a sorted array or list.
Binary search can also be implemented using multi-threading where we utilizes the cores of processor by providing each thread a portion of list to search for the key.
Number of threads depends upon the number of cores your processor has and its better to create one thread for each core.
// Program to perform binary search using pthreads. #include <iostream> using namespace std; // Size of array. #define MAX 16 // Maximum number of threads. #define MAX_THREAD 4 // Array to be searched. int a[] = { 1, 5, 7, 10, 12, 14, 15, 18, 20, 22, 25, 27, 30, 64, 110, 220 }; // Key that needs to be searched. int key = 110; bool found = false; int part = 0; void* binary_search(void* arg) { // Each thread checks 1/4 of the array for the key. int thread_part = part++; int mid; int low = thread_part * (MAX / 4); int high = (thread_part + 1) * (MAX / 4); // Search for the key until low < high or key is found in any portion of array. while (low < high && !found) { // Normal iterative binary search algorithm. mid = (high - low) / 2 + low; if (a[mid] == key) { found = true; break; } else if (a[mid] > key) high = mid - 1; else low = mid + 1; } } // Driver Code. int main() { pthread_t threads[MAX_THREAD]; for (int i=0; i<MAX_THREAD; i++) pthread_create(&threads[i], NULL, binary_search, (void*)NULL); for (int i=0; i<MAX_THREAD; i++) pthread_join(threads[i], NULL); // Key found in array. if (found) std::cout << key << " found in array" << std::endl; // Key not found in array. else std::cout << key << " not found in array" << std::endl; return 0; }
returns:
110 found in array
NOTE: Compile with:
g++ -pthread program_name.cpp