30/09/2018, 16:14
Thuật toán tìm kiếm nhị phân trong mảng 1 chiều
#include <iostream>
using namespace std;
#define MAX 100
void nhapMang(int [], int);
void xuatMang(int [], int);
int binarySearch(int [], int , int);
void nhapMang(int a[], int n)
{
for (int i = 0; i < n; ++i)
{
cout << "Nhap gia tri phan tu a[" << i << "] : ";
cin >> a[i];
}
}
void xuatMang(int a[], int n)
{
for (int i = 0; i < n; ++i)
{
cout << " " << a[i] << " ";
}
}
int binarySearch(int a[], int n, int giaTri)
{
int dau = 0, cuoi = n - 1;
for (;cuoi>dau;)
{
int giua = (dau + cuoi) / 2;
if (giua == giaTri)
{
return giua;
}
else if (giua > giaTri)
{
cuoi = giua;
}
else
{
cuoi = dau + 1;
}
}
return -1;
}
int main(int argc, char ** argv)
{
int a[MAX], n;
do
{
cout << "
Moi ban nhap so luong phan tu: ";
cin >> n;
if (n<0 || n>MAX)
{
cout << "
So luong phan tu ban nhap ko hop le. vui long kiem tra lai!!";
}
} while (n<0||n>MAX);
nhapMang(a, n);
xuatMang(a, n);
int giaTriCanTim;
cout << "
Nhap gia tri can tim kiem:";
cin >> giaTriCanTim;
int viTri = binarySearch(a, n, giaTriCanTim);
if (viTri == -1)
{
cout << "
Rat tiec gia tri ban can tim ko nam trong mang!!";
}
else
{
cout << "
Gia tri ( " << giaTriCanTim << " ) ton tai trong mang va nam o vi tri a[" << viTri << "]
";
}
system("pause");
return 0;
}
Bài liên quan