Linear search mencari satu nilai di array dengan cara paling sederhana: cek isinya satu per satu dari depan, sampai ketemu atau sampai habis. Hasilnya index tempat nilai itu ketemu, atau -1 kalau gak ada. Mirip mencari nama teman di daftar kontak yang gak urut: kamu baca dari atas, satu per satu.
🧪 Tebakan cepat: array-nya berisi 8 angka, dan angka yang kamu cari gak ada di situ. Berapa kali linear search mengecek sebelum menyerah: 1, 4, atau 8? Tebak dulu, jawabannya ada di bagian "Berapa langkahnya".
Cara kerjanya
Cari 9 di [4, 2, 7, 1, 9, 3, 8, 5]. Index adalah nomor posisi di array, mulai dari 0.
| Langkah | Yang dicek | Hasilnya |
|---|---|---|
| 1 | arr[0] = 4 |
bukan 9, lanjut |
| 2 | arr[1] = 2 |
bukan 9, lanjut |
| 3 | arr[2] = 7 |
bukan 9, lanjut |
| 4 | arr[3] = 1 |
bukan 9, lanjut |
| 5 | arr[4] = 9 |
ketemu, kembalikan 4 |
Ditulis di JavaScript:
function linearSearch(arr, target) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === target) return i; // ketemu, berhenti di sini
}
return -1; // semua sudah dicek, gak ada
}
const angka = [4, 2, 7, 1, 9, 3, 8, 5];
console.log(linearSearch(angka, 9)); // 4
console.log(linearSearch(angka, 6)); // -1
targetadalah nilai yang dicari.- Loop
forjalan dari index 0 sampai index terakhir. arr[i] === targetmembandingkan isi di posisiidengan yang dicari. Begitu sama,return ilangsung menghentikan function dan mengembalikan index-nya, bukan nilainya. Mencari 9 hasilnya 4, karena 9 ada di index 4.return -1ditulis sesudah loop, jadi cuma jalan kalau semua isi sudah dicek dan gak ada yang cocok. Dipilih-1karena gak ada index yang negatif.
Berapa langkahnya
- Kasus terbaik: yang dicari ada di index 0. Cukup 1 kali cek.
- Kasus terburuk: yang dicari ada di paling belakang, atau gak ada sama sekali. Semua isi dicek. Mencari 6 di array tadi butuh 8 kali cek, baru hasilnya
-1. Itu jawaban tebakannya.
Banyaknya data disebut n. Karena kasus terburuknya mengecek semua isi, linear search ditulis O(n): datanya dua kali lipat, waktunya kira-kira dua kali lipat. 1.000 data, paling banyak 1.000 kali cek.
Kapan pakai linear search
Ada cara yang jauh lebih cepat, binary search (materi berikutnya), tapi syaratnya datanya harus sudah terurut. Mengurutkan data dulu lebih mahal daripada sekali linear search. Jadi linear search pas kalau:
- datanya gak terurut dan cuma perlu dicari sekali,
- datanya kecil, misalnya puluhan isi,
- syaratnya bukan "sama persis", misalnya mencari harga pertama yang di bawah 50.000.
Method bawaan arr.indexOf(), arr.includes(), dan arr.find() juga linear search di balik layar.
⚠️ Jebakan yang sering ketemu
return -1di dalam loop. Kalau ditulisif (...) return i; else return -1;di dalam loop, function sudah berhenti di angka pertama yang gak cocok.return -1ditaruh sesudah loop.- Lupa
return -1. Tanpa itu, function mengembalikanundefinedwaktu nilainya gak ada, dan kode yang memakainya bisa salah tanpa ketahuan. - Linear search di dalam loop. Loop 1.000 putaran yang tiap putarannya memanggil
includes()ke daftar 1.000 isi bisa jadi 1 juta kali cek. Kalau perlu mengecek berkali-kali, masukkan datanya keSetdulu.
TL;DR: Linear search mengecek isi array satu per satu dari index 0. Ketemu: kembalikan index-nya, bukan nilainya. Habis tanpa ketemu: kembalikan -1, ditulis sesudah loop. Kasus terbaik 1 kali cek, terburuk semua isi, jadi O(n). Pakai untuk data yang gak terurut, kecil, atau cuma dicari sekali. Data terurut yang dicari berkali-kali lebih cocok pakai binary search.