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.go
Replay: real traced execution (multi-file project)
package main
import "fmt"
func linearSearch(arr []int, target int) int {
for i := 0; i < len(arr); i++ {
if arr[i] == target {
return i
}
}
return -1
}
func main() {
arr := []int{4, 7, 1, 9, 3, 8}
target := 9
result := linearSearch(arr, target)
fmt.Println(result)
}
arr ← [4, 7, 1, 9, 3, 8]
14func main() {15 arr := []int{4, 7, 1, 9, 3, 8}16 target := 9values this step[4, 7, 1, 9, 3, 8]arrtarget ← 9
15arr := []int{4, 7, 1, 9, 3, 8}16target := 917result := linearSearch(arr, target)values this step9target[4, 7, 1, 9, 3, 8]arrresult ← -1
16target := 917result := linearSearch(arr, target)18fmt.Println(result)values this step-1result9targetmatch ← no
6for i := 0; i < len(arr); i++ {7 if arr[i] == target {8 return ivalues this stepnomatch0i4arr[i]9targetmatch ← no
6for i := 0; i < len(arr); i++ {7 if arr[i] == target {8 return ivalues this stepnomatch1i7arr[i]9targetmatch ← no
6for i := 0; i < len(arr); i++ {7 if arr[i] == target {8 return ivalues this stepnomatch2i1arr[i]9targetmatch ← yes
6for i := 0; i < len(arr); i++ {7 if arr[i] == target {8 return ivalues this stepyesmatch3i9arr[i]9targetresult ← 3
7if arr[i] == target {8 return i9}values this step3result3istdout ← 3
17 result := linearSearch(arr, target)18 fmt.Println(result)19}values this step3stdout3result
Complexity
- Time: O(n)
- Space: O(1)
Implementation notes
- Go: explicit
for i := 0; i < len(arr); i++with an earlyreturn ithe momentarr[i] == target. The standardslices.Indexwould hide the walk the lesson is teaching. - Function signature
func linearSearch(arr []int, target int) intdocuments the integer-slice contract; the-1sentinel mirrors the language-neutral spec. - The replay shows the running index, the element being checked, and a
matchindicator on each frame.