DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   C (http://www.daniweb.com/forums/forum118.html)
-   -   Code Snippet: Binary Search of an Integer Array (http://www.daniweb.com/forums/thread216422.html)

vegaseat Jan 24th, 2005 11:56 pm
Binary Search of an Integer Array
 
Folks have asked numerous times for a code snippet of a binary search of an array. Here is heavily commented code with a few test printf() included to give you a picture of what is going on.

  1. // binary search of an integer array, this search is efficient for large arrays
  2. // tested with PellesC vegaseat 24jan2005
  3.  
  4. #include <stdio.h>
  5.  
  6. int main()
  7. {
  8. int a[20] = {0};
  9. int n, i, j, temp;
  10. int *beg, *end, *mid, target;
  11.  
  12. printf(" enter the total integers you want to enter (make it less then 20):\n");
  13. scanf("%d", &n);
  14. if (n >= 20) return 0; // ouch!
  15. printf(" enter the integer array elements:\n" );
  16. for(i = 0; i < n; i++)
  17. {
  18. scanf("%d", &a[i]);
  19. }
  20.  
  21. // sort the loaded array, a must for binary search!
  22. // you can apply qsort or other algorithms here
  23. for(i = 0; i < n-1; i++)
  24. {
  25. for(j = 0; j < n-i-1; j++)
  26. {
  27. if (a[j+1] < a[j])
  28. {
  29. temp = a[j];
  30. a[j] = a[j+1];
  31. a[j+1] = temp;
  32. }
  33. }
  34. }
  35. printf(" the sorted numbers are:");
  36. for(i = 0; i < n; i++)
  37. {
  38. printf("%d ", a[i]);
  39. }
  40.  
  41. // point to beginning and end of the array
  42. beg = &a[0];
  43. end = &a[n]; // use n = one element past the loaded array!
  44. printf("\n beg points to address %d and end to %d",beg, end); // test
  45.  
  46. // mid should point somewhere in the middle of these addresses
  47. mid = beg += n/2;
  48. printf("\n mid points to address %d", mid); // test
  49.  
  50. printf("\n enter the number to be searched:");
  51. scanf("%d",&target);
  52.  
  53. // binary search, there is an AND in the middle of while()!!!
  54. while((beg <= end) && (*mid != target))
  55. {
  56. // is the target in lower or upper half?
  57. if (target < *mid)
  58. {
  59. end = mid - 1; // new end
  60. n = n/2;
  61. mid = beg += n/2; // new middle
  62. }
  63. else
  64. {
  65. beg = mid + 1; // new beginning
  66. n = n/2;
  67. mid = beg += n/2; // new middle
  68. }
  69. }
  70.  
  71. // did you find the target?
  72. if (*mid == target)
  73. {
  74. printf("\n %d found!", target);
  75. }
  76. else
  77. {
  78. printf("\n %d not found!", target);
  79. }
  80.  
  81. getchar(); // trap enter
  82. getchar(); // wait
  83. return 0;
  84. }
  85.  
  86.  
samrprog Jul 26th, 2009 12:17 pm

Thanks a lot. This program was a real help.


All times are GMT -4. The time now is 8:43 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC