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
0