Arrays and Iteration
Linear Search
Walk an array once looking for a target value. Return the index of the
first match, or -1 if none. The simplest possible search loop.
Algorithm
Canonical input arr = [4, 7, 1, 9, 3, 8] with target = 9 finishes
after four compares; the matching index is 3.
early exit
Return the index the moment `arr[i]` equals the target. Walking past it would defeat the point.
sentinel return
A no-match walk falls off the loop and returns `-1`.
Basic Implementation
basic.rb
Replay: real traced execution (multi-file project)
def linear_search(arr, target)
i = 0
while i < arr.length
if arr[i] == target
return i
end
i = i + 1
end
-1
end
arr = [4, 7, 1, 9, 3, 8]
target = 9
result = linear_search(arr, target)
puts result
arr ← [4, 7, 1, 9, 3, 8]
12arr = [4, 7, 1, 9, 3, 8]13target = 9values this step[4, 7, 1, 9, 3, 8]arrtarget ← 9
12arr = [4, 7, 1, 9, 3, 8]13target = 914result = linear_search(arr, target)values this step9target[4, 7, 1, 9, 3, 8]arrresult ← -1
13target = 914result = linear_search(arr, target)15puts resultvalues this step-1result9targetmatch ← no
3while i < arr.length4 if arr[i] == target5 return ivalues this stepnomatch0i4arr[i]9targetmatch ← no
3while i < arr.length4 if arr[i] == target5 return ivalues this stepnomatch1i7arr[i]9targetmatch ← no
3while i < arr.length4 if arr[i] == target5 return ivalues this stepnomatch2i1arr[i]9targetmatch ← yes
3while i < arr.length4 if arr[i] == target5 return ivalues this stepyesmatch3i9arr[i]9targetresult ← 3
4if arr[i] == target5 return i6endvalues this step3result3istdout ← 3
14result = linear_search(arr, target)15puts resultvalues this step3stdout3result
Complexity
- Time: O(n)
- Space: O(1)
Implementation notes
- Ruby: explicit
while i < arr.lengthwith an earlyreturn ithe momentarr[i] == target. The stdlibarr.index(target)orarr.find_index { |x| x == target }would hide the walk the lesson is teaching. - Method signature
def linear_search(arr, target)documents the array contract; the-1sentinel mirrors the language-neutral spec rather than returningnil. - The replay shows the running index, the element being checked, and
a
matchindicator on each frame.