Thuật toán tìm kiếm tuần tự: Input: Mảng A gồm n phần tử và giá trị x cần tìm Output: vị trí mà phần tử x xuất hiện trong mảng A, nếu trong mảng A không có phần tử X thì xuất ra thông báo: khong tim thay Bắt đầu từ phần tử đầu tiên, lần lượt so sánh từng phần tử với điều kiện tìm kiếm. Nếu gặp phần tử đầu tiên thỏa mãn điều kiện tìm thì dừng. Ngược lại tăng chỉ số lên 1 đơn vị để kiểm tra phần tử kế tiếp.
Chú ý: thuật toán dừng nếu một trong hai điều kiện dưới đây xảy ra: - Tìm thấy - Hết mảng.
Tương đương với điều kiện tiếp tục tìm: Chưa tìm được và chưa hết mảng. - nếu tìm thấy thì xuất ra vị trí mà X xuất hiện trong mảng (trong thuật toán này sẽ là vị trí đầu tiên mà X xuất hiện) - nếu không tìm thấy thì xuất ra thông báo : khong tim thay
Thuật toán tìm kiếm nhị phân: Thuật toán tìm kiếm nhị phân dùng để tìm kiếm phần tử trong một danh sách đã được sắp xếp, ví dụ như trong một danh bạ điện thoại sắp xếp theo tên, có thể tìm kiếm số điện thoại của một người theo tên người đó một cách dễ dàng như khi ta tra từ điển
Dữ liệu vào: mảng A có thứ tự (a1<a2<a3<...<an) và giá trị x cần tìm Kết quả: thứ tự của x trong A nếu tìm thấy, nếu không trả về KHÔNG_THẤY
- Cấu trúc dữ liệu cần thiết để cài đặt thuật toán: + Mảng A có thứ tự gồm n phần tử. + X là giá trị cần tìm. + L: lưu chỉ số của phần tử đầu trong đoạn cần kiểm tra. + R: lưu chỉ số của phần tử cuối trong đoạn cần kiểm tra. + mid:= (L+R) div 2 : lưu chỉ số của phần tử được kiểm tra tại mỗi bước + isFound: lưu lại kết quả tìm kiếm, đươc khởi tạo là false; Thuật toán (thuật toán tham khảo) : bước 1: L:=1; R:= n; Mid:= (L+R) div 2; isFound:= false; bước 2: trong khi L <= R ta thực hiện: - nếu a[mid] = x thì Begin + Thông báo tìm thấy X tại vị trí mid;
+ isFound:=true;// đánh dấu lại đã tìm thấy + Thoát khỏi vòng lặp. End; - nếu a[mid] < x thì L:= mid + 1; - nếu a[mid] > x thì R:= mid -1; - mid:= (L+R) div 2; - quay lại bước 2 bước 3: - nếu isFound = false thì xuất ra thông báo không tìm thấy x trong mảng;
|