Ví dụ hàm đệ qui: Tìm kiếm nhị phânVí dụ hàm đệ qui: Tìm kiếm nhị phân

Một phần của tài liệu THDC - Bai II.05 doc (Trang 43 - 46)

Ví dụ hàm đệ qui: Tìm kiếm nhị phân

Trên mảng đã sắp xếp tăng dần hoặc giảm dần Trên mảng đã sắp xếp tăng dần hoặc giảm dần

Nếu giá trị cần tìm > giá trị của phần tử đầu tiên Nếu giá trị cần tìm > giá trị của phần tử đầu tiên

và nhỏ hơn giá trị của phần tử trong mảng: và nhỏ hơn giá trị của phần tử trong mảng:

 So sánh phần tử giữa mảng với giá trị cần tìmSo sánh phần tử giữa mảng với giá trị cần tìm

Nếu bằng, tìm thấy và kết thúc

Nếu bằng, tìm thấy và kết thúc

Nếu

Nếu giá trị cần tìm < giá trị giữagiá trị cần tìm < giá trị giữa, tìm trong nửa trước của mảng, tìm trong nửa trước của mảng Nếu

Nếu giá trị cần tìm > giá trị giữagiá trị cần tìm > giá trị giữa, tìm trong nửa sau của mảng, tìm trong nửa sau của mảng Lặp lại cho tới khi tìm thấy hoặc đã duyệt qua hết các nửa

Lặp lại cho tới khi tìm thấy hoặc đã duyệt qua hết các nửa

Mỗi lần như vậy ta loại bỏ được một nửa số Mỗi lần như vậy ta loại bỏ được một nửa số

phần tử đang xét - tìm kiếm nhị phân phần tử đang xét - tìm kiếm nhị phân 

#include <stdio.h> #include <stdio.h> #include <stdio.h> #define KT 20 #define KT 20 void main() void main() { { int ds[KT] = {1, 4, 8, 9, 18, 27, 38, 49, 55, 59, int ds[KT] = {1, 4, 8, 9, 18, 27, 38, 49, 55, 59, 67,68, 69, 72, 75, 79, 87, 88, 97, 98}; 67,68, 69, 72, 75, 79, 87, 88, 97, 98};

int cs_min, cs_max; /* Bien luu chi so cua ptu dau int cs_min, cs_max; /* Bien luu chi so cua ptu dau

va ptu cuoi trong mang */

va ptu cuoi trong mang */

int gtri_tim; // gia tri can tim kiem int gtri_tim; // gia tri can tim kiem

int cs; // chi so int cs; // chi so

scanf( “Nhap gia tri can tim: %d”, & gtri_tim);scanf( “Nhap gia tri can tim: %d”, & gtri_tim);

minindex = 0; // Chi so cua phan tu dau tienminindex = 0; // Chi so cua phan tu dau tien

while (cs_min < cs_max)

while (cs_min < cs_max)

{

{

cs = (cs_max + cs_min)/2;

cs = (cs_max + cs_min)/2;

if (ds[cs]==gtri_tim) //Neu tim thay thi dungif (ds[cs]==gtri_tim) //Neu tim thay thi dung

{ {

cs_min = cs_max; break;

cs_min = cs_max; break;

}}

if (gtri_tim > ds[cs]) // Khoang sauif (gtri_tim > ds[cs]) // Khoang sau { { cs_min = cs + 1; cs_min = cs + 1; } } else{ else{ cs_max = cs - 1; cs_max = cs - 1; } //Khoang truoc } //Khoang truoc }}

if (cs_min == cs_max){if (cs_min == cs_max){

Một phần của tài liệu THDC - Bai II.05 doc (Trang 43 - 46)

Tải bản đầy đủ (PPT)

(46 trang)