Ý tưởng của thuật toán:
Phép tìm kiếm nhị phân được thực hiện trên dãy khoá có thứ tự (xét dãy tăng dần):
a[0]<=a[1]<=a[2]<=...<=a[n-1]. Giá trị cần tìm x.
Chia đôi dãy khoá cần tìm kiếm. So sánh khoá giữa dãy với x, có 3 trường hợp xãy ra:
- Giá trị khoá này bằng x, tìm kiếm thành công
- Giá trị khoá này lớn hơn x, thì ta tiến hành tìm x với nữa bên trái của khoá này
- Giá trị khoá này nhỏ hơn x, thì ta tiến hành tìm x với nữa bên phải của khoá này
Trường hợp tìm kiếm thất bại khi dãy khoá cần tìm không có phần tử nào.
Cài đặt Thuật toán [code Turbo C\C++]:
/*Thuật toán tìm kiếm nhị phân không đệ quy*/
int BinarySearch(int x, int a[],int n) // Tìm khoá x trong dãy a1,a2…,an
{
int left =0; //Left trỏ về chỉ số đầu dãy
int right =n-1; //right trỏ về vị trí cuối dãy
int mid; // mid trỏ vào giữa dãy
int found = 0; //dùng để xác tìm thành công hay không (0: không tìm thấy, 1: tìm thấy)
while (left <= right && found==0){
mid = (left + right) / 2;//mid ở giữa dãy
if (a[mid]== x) //trường hợp tìm thấy dừng thuật toán
found = 1;
else
if (a[mid]<x)
left = mid +1; //xác định lại đoạn tìm tiếp theo là bên phải
else
right = mid -1; //xác định lại đoạn tìm tiếp theo là bên trái
}
return found;
}
/*Thuật toán tìm kiếm nhị phân đệ quy*/
int BinSearch(int[] a, int gt, int dau, int cuoi)
{
int i, j;
i = dau; j = cuoi;
if (i > j)
{
return -1; // không tìm thấy
}
int giua = (i + j) / 2;
if (gt == a[giua])
{
return giua; // tìm thấy
}
else if (gt < a[giua])
{
j = giua - 1;
return BinSearch(a, gt, dau, j);
}
else
{
i = giua + 1;
return BinSearch(a, gt, i, cuoi);
}
}
Thứ Tư, 5 tháng 3, 2014
Đăng ký:
Đăng Nhận xét (Atom)
Bài đăng phổ biến
-
Công cụ Đăng Ký Bản Quyền Sử Dụng Kế Toán Smart Pro ( 2.0 - 2.5 - 3.0) Video Hướng Dẫn Đăng Ký Bản Quyền Kế Toán Smart Pro (2.0 - 2.5 - 3.0)...
-
HTsoft POS .NET là phần mềm quản lý Kho-Bán hàng và Chăm sóc khách hàng chuyên nghiệp, áp dụng tốt cho nhiều lĩnh vực kinh doanh khác nhau ...
-
Acc: architer Acc: fcyenluong Pass: 020901sl Acc: nhux12 Pass: phuongx1 Acc: vodoixxz Pass: 123456789y Acc: thanhkhunglk23 Pass: 01642688017...
-
* lưu ý: tính năng này yêu cầu bạn phải có kết nối Internet khi sử dụng phần mềm. Bạn vui lòng thực hiện các bước sau để đăng ký dùng miễn p...
-
#include <conio.h> #include <stdio.h> #define max 100 /*Hàm nhập ma trận hệ số*/ void NhapMaTran ( float A [ max ][ max ], in...
-
Có thể xài được nhưng cũng có thể không xài được nếu như chủ nhân đã đổi pass. Acc: hoanglinh1714 Pass: A01656101024LINH Acc: hieukenpt19999...
-
Đề bài: nhận vào một chuỗi các ký tự. Hãy đảo ngược các ký tự trong chuỗi. Bài giải: #include <string.h> #include <stdio.h> int...
-
Clover 3.0.386 - Tạo Tabs File Explorer cho Windows 8.1 http://www.softpedia.com/progDownload/Clover-EJIE-Download-220301.html
-
Đề bài: nhập 2 số nguyên dương a,b. Tính ước số chung lớn nhất và bội chung nhỏ nhất của a,b. Bài giải: Cách 1: #include <stdio.h> int...
-
Bổ sung vào các chức năng đã có ở hai phiên bản trước, phần mềm Quản lý gia phả phiên bản Advanced được nâng cấp thêm các tính năng nổi trội...


0 nhận xét:
Đăng nhận xét