Đi từ trái sang phải
Với `a = [14, 8, 21, 8, 5]` và `k = 8`, tìm kiếm tuần tự so sánh lần lượt `a[0]=14` rồi `a[1]=8`. Lần thứ hai khớp, nên trả chỉ số 1 và dừng. Dãy **không cần sắp xếp**. Nếu tìm 5, phải so sánh cả năm phần tử; nếu tìm 99, cũng phải xem cả năm rồi báo không thấy. Đây là số lần so sánh của ví dụ, không là thời gian thực đo trên máy.
Hàm tìm một vị trí
```python
def tim_tuan_tu(a, k):
for i in range(len(a)):
if a[i] == k:
return i
return -1
print(tim_tuan_tu([14, 8, 21, 8, 5], 8))
print(tim_tuan_tu([14, 8, 21, 8, 5], 99))
```
Hai dòng in là `1` và `-1`. `return -1` nằm **sau** vòng lặp: chỉ báo không thấy khi đã xét hết mà không có phần tử khớp. Nếu đặt nó trong vòng lặp ngay sau lần so sánh đầu sai, hàm sẽ bỏ qua các phần tử còn lại. Với dãy rỗng, vòng lặp không chạy và kết quả cũng là `-1`. Dãy có nhiều số 8 chỉ trả vị trí đầu vì hàm dừng ở lần khớp đầu.
Bài luyện
Hàm tìm tuần tự trong bài trả gì khi tìm 8 ở dãy `[14, 8, 21, 8, 5]`?
Đó là vị trí khớp đầu tiên.
Vị trí 3 cũng khớp nhưng hàm đã dừng.
Hàm này trả một chỉ số, không phải danh sách.
Dãy có số 8.
Lời giải
Hàm xét chỉ số 0 rồi 1. Tại a[1]=8, lệnh return 1 kết thúc hàm nên không xét tới a[3].
Bài luyện
Với dãy `[14, 8, 21, 8, 5]`, tìm số 99 bằng tìm kiếm tuần tự cần so sánh bao nhiêu phần tử?
Không thể kết luận vắng mặt nếu chưa xét dữ liệu.
Một phần tử đầu chưa đủ.
Ba phần tử chưa đủ vì còn hai.
Không thấy nên xét hết năm phần tử.
Lời giải
Giá trị 99 không có trong dãy. Thuật toán xét đủ các chỉ số 0–4, tức năm phần tử, rồi trả -1.
Bài luyện
Trong hàm trên, vì sao `return -1` đặt sau vòng `for`?
Không khớp ở một phần tử chưa đủ để kết luận.
Hàm không sắp xếp dãy.
Vòng for vẫn xét phần tử cuối nếu chưa dừng.
Hàm trả một vị trí đầu, không phải mọi vị trí.
Lời giải
Nếu một phần tử đầu không khớp, hàm cần tiếp tục. Chỉ khi vòng lặp kết thúc mà chưa return chỉ số nào mới return -1.
Đang học