InterviewSolution
| 1. |
Write an algorithm to search for 66 and 71 in the following array:3, 4, 7, 11, 18, 29, 45, 71, 87, 89, 93, 96, 99Make use of binary search technique. Also give the intermediate results while executing this algorithm. Convert this algorithm into a C++ program. |
|
Answer» Algorithm: 1. Set beg=0,last=12 2. REPEAT steps 3 through 6 UNTIL beg>last //INT() is used to extract integer part 3. mid=INT((beg+last)/2) 4. if A[mid]==ITEM then { print "Search Successful" print ITEM,"fount at",mid break /* go out of the loop*/ } 5. if A[mid]ITEM then last=mid-1 /* END of repeat */ 7. if beg!=last print "Unsuccessful Search" 8. END Intermediate Results: (i) Search for 66. Step 1: beg=1; last=13; mid=INT(1+13)/2=7 Step 2: A[mid] i.e., A[7] is 45 45<66 then beg=mid+1 i.e., beg=7+1=8 Step 3: mid=Int((beg+last)/2)=INT((8+13)/2)=10 A[10] i.e., 89>66 then last = mid-1=10-1=9 Step 4: mid=((8+9)/2)=8 A[8] is 71 71>66 than last = mid-1=8-1=7 Step 5: mid=((8+7)/2)=7 A[7] is 45 45 < 66 then beg = mid+1=7+1=8 Step 6: mid=((8+8)/2)=8 (beg=last=8) A[8] is 71 => 71!=66 “Search Unsuccessful!!!” (ii) Search for 71. Step 1: beg=1; last=13; mid=INT(1+13)/2=7 Step 2: A[mid] i.e., A[7] is 45 45<71 then beg=mid+1 i.e., beg=7+1=8 Step 3: mid=Int((beg+last)/2)=INT((8+13)/2)=10 A[10] i.e., 89>71 then last = mid-1=10-1=9 Step 4: mid=((8+9)/2)=8 A[8] is 71 71=>71 “Search Successful!!!” Program: #include<iostream.h> int Bsearch(int [],int); int main() { int A[]={3,4,7,11,18,29,45,71,87,89,93,96,99}; int index; index=Bsearch(A,71); if(index==-1) cout<<"Element not found.."; else cout<<"Element found at index:"<A[mid]) beg=mid+1; else last=mid-1; } rerurn -1; } int Bsearch(int A[],int item) { int beg,last,mid; beg=0; last=13-1; while(beg<=last) { mid=(beg+last)/2; if(item==A[mid]) return mid; else if (item>A[mid]) beg=mid+1; else last=mid-1; } rerurn -1; } |
|