Binary Search
By Huma Imad
Example 1
Binary Search
• Prerequisite is that the list is already sorted
• Binary Search is similar to searching a word in a dictionary
By Huma Imad
[1] 30
Initialization
First
[2] 45
Found ←FALSE
[3] 53 SearchFailed ← FALSE
First ← 1
[4] 79 Last ← Maxitems II set boundaries of search area
// First and Last hold the index values
[5] 86
Last [6] 95
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
First [1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last
(1+6) /2 is 3.5
THEN (1+6) DIV 2 is 3
Middle [3] 53 SearchFailed ← TRUE
ELSE
[4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
Last [6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
First [1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last IF List[3] = 79
THEN Is FALSE
Middle [3] 53 SearchFailed ← TRUE
ELSE
[4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
Last [6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
First [1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last IF List[3] > 79
THEN Is FALSE
Middle [3] 53 SearchFailed ← TRUE
ELSE
[4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
Last [6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last IF List[3] > 79
THEN Is FALSE
Middle [3] 53 SearchFailed ← TRUE
ELSE
First [4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
Last [6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last (4 + 6) /2 is 5
THEN (4 + 6) DIV 2 is 5
[3] 53 SearchFailed ← TRUE
ELSE
First [4] 79
IF List[Middle] > Searchitem
Middle [5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
Last [6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last IF List[5] = 79 is FALSE
THEN
[3] 53 SearchFailed ← TRUE
ELSE
First [4] 79
IF List[Middle] > Searchitem
Middle [5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
Last [6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last
IF List[5] > 79 is TRUE
THEN
[3] 53 SearchFailed ← TRUE
ELSE
First [4] 79
IF List[Middle] > Searchitem
Middle [5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
Last [6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last
THEN Last ← 5-1
[3] 53 SearchFailed ← TRUE
ELSE
Last First [4] 79
IF List[Middle] > Searchitem
Middle [5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last
THEN (4+4) DIV 2 is 4
[3] 53 SearchFailed ← TRUE
ELSE
Middle Last First [4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last
THEN IF List[4] = 79 is TRUE
[3] 53 SearchFailed ← TRUE
ELSE
Middle Last First [4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last
THEN This will exit the loop
[3] 53 SearchFailed ← TRUE
ELSE
Middle Last First [4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last Found is TRUE
THEN This will exit the loop
[3] 53 SearchFailed ← TRUE
ELSE
Middle Last First [4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 79
[1] 30
IF Found = TRUE
[2] 45 THEN
[3] 53
OUTPUT Middle II output position where item was found
ELSE
OUTPUT "Item not present in array"
Middle Last First [4] 79 END IF
[5] 86
[6] 95
OUTPUT Item Found at
index 4
Assume
Searchitem ← 79
Found ←FALSE
SearchFailed ← FALSE
First ← 1
By Huma Imad
Last ← Maxitems
WHILE NOT Found AND NOT SearchFailed
[1] 30 Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
THEN
[2] 45 Found ← TRUE
ELSE
IF First >= Last
[3] 53 Complete THEN
SearchFailed ← TRUE
code at a ELSE
glance
[4] 79 IF List[Middle] > Searchitem
THEN II must be in first half
[5] 86 Last ← Middle - 1 II move upper boundary
ELSE II must be in second half
[6] 95 First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
IF Found = TRUE
THEN
Assume OUTPUT Middle II output position where item was found
ELSE
Searchitem ← 79 OUTPUT "Item not present in array"
END IF
Example 2
Item not found
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
First [1] 30
THEN
Found ← TRUE
[2] 45 ELSE
IF First >= Last
THEN
Middle [3] 53 SearchFailed ← TRUE
ELSE
[4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
Last [6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 42
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
First [1] 30
THEN
Found ← TRUE
[2] 45 ELSE
Last
IF First >= Last
THEN
Middle [3] 53 SearchFailed ← TRUE
ELSE
[4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 42
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
Middle First [1] 30
THEN
Found ← TRUE
[2] 45 ELSE
Last
IF First >= Last
THEN
[3] 53 SearchFailed ← TRUE
ELSE
[4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 42
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
Middle [1] 30
THEN
Found ← TRUE
[2] 45 ELSE
First Last
IF First >= Last
THEN
[3] 53 SearchFailed ← TRUE
ELSE
[4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 42
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
Middle First Last
IF First >= Last
THEN
[3] 53 SearchFailed ← TRUE
ELSE
[4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 42
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
[1] 30
THEN
Found ← TRUE
[2] 45 ELSE
Middle First Last
IF First >= Last
THEN
[3] 53 SearchFailed ← TRUE
ELSE
[4] 79
IF List[Middle] > Searchitem
[5] 86 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[6] 95 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
ENDIF
ENDIF
ENDIF
ENDWHILE
Assume
Searchitem ← 42
WHILE NOT Found AND NOT SearchFailed
By Huma Imad Middle ← (First+ Last) DIV 2 II find middle of current search area
IF List [Middle] = Searchitem
THEN
[1] 30 Found ← TRUE
ELSE
IF First >= Last
Last [2] 45 THEN
Middle First
SearchFailed ← TRUE
ELSE
[3] 53
IF List[Middle] > Searchitem
[4] 79 THEN II must be in first half
Last ← Middle - 1 II move upper boundary
[5] 86 ELSE II must be in second half
First ← Middle+ 1 II move lower boundary
[6] 95 ENDIF
ENDIF
ENDIF
ENDWHILE
IF Found = TRUE
THEN
OUTPUT Middle II output position where item was found
Assume ELSE
Searchitem ← 42 OUTPUT "Item not present in array"
END IF
Example 3
Summary
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
First [1] 30 IF List [Middle] = Searchitem
THEN
[2] 32 Found ← TRUE
ELSE
IF First >= Last
[3] 36 THEN
SearchFailed ← TRUE
[4] 39 ELSE
Search IF List[Middle] > Searchitem
area Middle [5] 45
THEN II must be in first half
[6] 53 Last ← Middle - 1 II move upper boundary
ELSE II must be in second half
[7] 79
First ← Middle+ 1 II move lower boundary
ENDIF
[8] 86 ENDIF
ENDIF
[9] 95 ENDWHILE
Assume Last
Searchitem ← 36
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
First [1] 30 IF List [Middle] = Searchitem
THEN
[2] 32 Found ← TRUE
ELSE
Search
IF First >= Last
area [3] 36 THEN
SearchFailed ← TRUE
[4] 39 ELSE
Last
IF List[Middle] > Searchitem
Middle [5] 45
THEN II must be in first half
[6] 53 Last ← Middle - 1 II move upper boundary
ELSE II must be in second half
[7] 79
First ← Middle+ 1 II move lower boundary
ENDIF
[8] 86 ENDIF
ENDIF
[9] 95 ENDWHILE
Assume
Searchitem ← 36
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
First [1] 30 IF List [Middle] = Searchitem
THEN
[2] 32 Found ← TRUE
Middle ELSE
Search
IF First >= Last
area [3] 36 THEN
SearchFailed ← TRUE
[4] 39 ELSE
Last
IF List[Middle] > Searchitem
[5] 45
THEN II must be in first half
[6] 53 Last ← Middle - 1 II move upper boundary
ELSE II must be in second half
[7] 79
First ← Middle+ 1 II move lower boundary
ENDIF
[8] 86 ENDIF
ENDIF
[9] 95 ENDWHILE
Assume
Searchitem ← 36
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
[1] 30 IF List [Middle] = Searchitem
THEN
[2] 32 Found ← TRUE
Middle ELSE
IF First >= Last
First [3] 36 THEN
Search SearchFailed ← TRUE
area [4] 39 ELSE
Last
IF List[Middle] > Searchitem
[5] 45
THEN II must be in first half
[6] 53 Last ← Middle - 1 II move upper boundary
ELSE II must be in second half
[7] 79
First ← Middle+ 1 II move lower boundary
ENDIF
[8] 86 ENDIF
ENDIF
[9] 95 ENDWHILE
Assume
Searchitem ← 36
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
[1] 30 IF List [Middle] = Searchitem
THEN
[2] 32 Found ← TRUE
ELSE
IF First >= Last
Middle First [3] 36 THEN
Search SearchFailed ← TRUE
area [4] 39 ELSE
Last
IF List[Middle] > Searchitem
[5] 45
THEN II must be in first half
[6] 53 Last ← Middle - 1 II move upper boundary
ELSE II must be in second half
[7] 79
First ← Middle+ 1 II move lower boundary
ENDIF
[8] 86 ENDIF
ENDIF
[9] 95 ENDWHILE
Assume
Searchitem ← 36
Scenarios
To remember
WHILE NOT Found AND NOT SearchFailed
By Huma Imad
Middle ← (First+ Last) DIV 2 II find middle of current search area
[1] 30 IF List [Middle] = Searchitem
THEN
[2] 32 Found ← TRUE
ELSE
IF First >= Last
[3] 36 THEN
SearchFailed ← TRUE
[4] 39 ELSE
IF List[Middle] > Searchitem
[5] 45
THEN II must be in first half
[6] 53 Last ← Middle - 1 II move upper boundary
ELSE II must be in second half
[7] 79
First ← Middle+ 1 II move lower boundary
ENDIF
[8] 86 ENDIF
ENDIF
[9] 95 ENDWHILE
Q. What is the best and worst case of binary search?
The worst-case is when the target item is not in the search list. Number of
comparisons required is log 2 n for n elements.
The best-case is when the target is found in the middle of the search list.
Number of comparison required is 1.
Q. How many comparisons are needed for a binary search in a set of 64
elements?
Simply put, your answer is log 2 64 (ie 6) comparisons in worst case and
1 comparison in best case.
We usually represent the efficiency by big o notation So, In binary search, the
best case is O(1), average and worst case is O(log 2 n).
• What is the value of log 2 64?
log2 64 = 6, because 26 = 64.
• Therefore, it is obvious that logarithm operation is an inverse one to
exponentiation. There are a few specific types of logarithms. For
example, the logarithm to base 2 is known as the binary logarithm,
and it is widely used in computer science and programming languages