Arrays and Iteration
Linear Search
Walk a vector 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 <- c(4, 7, 1, 9, 3, 8) with target <- 9 finishes
after four compares; the matching 1-indexed position is 4.
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.R
Replay: real traced execution (multi-file project)
linear_search <- function(arr, target) {
i <- 1
while (i <= length(arr)) {
if (arr[i] == target) {
return(i)
}
i <- i + 1
}
return(-1)
}
arr <- c(4, 7, 1, 9, 3, 8)
target <- 9
result <- linear_search(arr, target)
cat(result, "\n", sep = "")
arr ← [4, 7, 1, 9, 3, 8]
12arr <- c(4, 7, 1, 9, 3, 8)13target <- 9values this step[4, 7, 1, 9, 3, 8]arrtarget ← 9
12arr <- c(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)15cat(result, "\n", sep = "")values this step-1result9targetmatch ← no
3while (i <= length(arr)) {4 if (arr[i] == target) {5 return(i)values this stepnomatch1i4arr[i]9targetmatch ← no
3while (i <= length(arr)) {4 if (arr[i] == target) {5 return(i)values this stepnomatch2i7arr[i]9targetmatch ← no
3while (i <= length(arr)) {4 if (arr[i] == target) {5 return(i)values this stepnomatch3i1arr[i]9targetmatch ← yes
3while (i <= length(arr)) {4 if (arr[i] == target) {5 return(i)values this stepyesmatch4i9arr[i]9targetresult ← 4
4if (arr[i] == target) {5 return(i)6}values this step4result4istdout ← 4
14result <- linear_search(arr, target)15cat(result, "\n", sep = "")values this step4stdout4result
Complexity
- Time: O(n)
- Space: O(1)
Implementation notes
- R: explicit
while (i <= length(arr))with an earlyreturn(i)the momentarr[i] == target. The stdlibwhich(arr == target)[1]is vectorised and would hide both the running index and the early-exit the lesson is teaching, andmatch(target, arr)would package the whole loop in a single C call. - Function signature
linear_search <- function(arr, target)documents the array contract; the-1sentinel mirrors the language-neutral spec rather than returningNA_integer_(which R programmers often reach for, but which would re-route control flow throughif (is.na(result)) ...in the caller). - The replay shows the running index, the element being checked, and a
matchindicator on each frame. R vectors are 1-indexed, so the match position prints as4instead of3like the 0-indexed language cohorts.