This is a "normal" binary search. You just need to have it return the
next lower number if a match is not found.
And of course, get rid of the superflous database records. sr[] is the
array of student records.

/* Number_Search uses a binary search, to search for a record's student

number. */

int Number_Search(int target) {
   int low, mid, high;
   low = 1; high = Hi;

   while(!target) {
      printf("\n Enter the Student Number: ");
      scanf("%d", &target);
   }
   while(low <= high) {
      mid = (low + high) / 2;
      if(sr[mid].sn == target) {         /* is it a match ? */
         /* PrintHeader(); */

         printf("\n  %5d   %-11s      %c   %2d   %-22s", sr[mid].sn,
         sr[mid].name, sr[mid].sex, sr[mid].age, sr[mid].major);

              return mid;
      } else if(sr[mid].sn < target)    /* is our guess too low? */
              low = mid + 1;                 /* then increase the mid point */
      else
              high = mid - 1;                /* too high, so decrease range */
   }
   printf("\n No Match ");

/* If no match, add your return to include the number in the array
which is just less than the match previously requested. */
   return 0;                            /* no match here */
}

Adak


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/algogeeks
-~----------~----~----~----~------~----~------~--~---

Reply via email to