Hoạt động tìm kiếm phần tử trong một mảng là việc đưa phần tử bên ngoài cần tìm kiếm vào mảng để kiểm tra xem phần tử đó có tồn tại trong mảng hay không và nếu có, thì phần tử đó nằm ở vị trí nào trong mảng.
Giả sử, mảng một chiều ban đầu của tôi là một mảng int a[10]
có các phần tử là: 11,22,33,44,55,66,77,88,99,10
. Nghĩa là mảng trên có 10 phần tử có kiểu số nguyên.
Tôi sẽ biểu diễn mảng trên theo hình minh họa dưới đây:
Vấn đề đặt ra là tôi muốn tìm kiếm phần tử 77 và kiểm tra rằng phần tử đó có tồn tại trong mảng hay không? Và nếu tồn tại, thì phần tử đó nằm ở vị trí nào trong mảng?
Bằng mắt thường, ta có thể dễ dàng phát hiện phần tử 77 có nằm trong mảng và nằm ở vị trí index = 6. Tuy nhiên, ta đang cần lập trình cho máy tính tìm kiếm phần tử trên vì thế ta cần thực hiện các bước dưới đây:
Bước đầu tiên: Duyệt qua tất cả các phần tử mảng
Bước thứ hai: Kiểm tra điều kiện nếu giá trị của phần tử cần tìm kiếm bằng với phần tử đang có trong mảng, thì lưu lại chỉ số của phần tử đó
Các tìm kiếm trên còn được gọi là tìm kiếm tuyến tính, nghĩa là duyệt qua phần tử của mảng để thực hiện việc tìm kiếm.
Chương trình tìm kiếm phần tử trong mảng có thể được xây dựng dễ dàng bằng cách sử dụng vòng lặp for
để duyệt tất cả các phần tử và câu điều kiện if
để kiểm tra phần tử đó có trong mảng hay không.
#include
int main() {
// khai báo mảng a có 10 phần tử
int a[10] = {11,22,33,44,55,66,77,88,99,10};
// phần tử cần tìm kiếm trong mảng
int phantu = 77;
// khai báo biến j để lưu lại kết quả tìm kiếm
int j;
// duyệt mảng bằng vòng lặp for
for(int i = 0; i < 10; i++) {
// nếu có phần tử cần tìm kiếm trong mảng
if(phantu == a[i]) {
// gán lại biến lưu địa chỉ j bằng địa chỉ thứ i
j = i;
break;
}
}
// nếu j có giá trị địa chỉ tìm kiếm thì hiển thị kết quả
if(j != NULL || j >= 0) {
printf("TIM THAY PHAN TU %d TAI VI TRI %d", phantu, j);
} else {
printf("KHONG TIM THAY PHAN TU %d", phantu);
}
}
Ta hoàn toàn xây dựng được hàm tìm kiếm phần tử của mảng. Hàm void TimKiem(int a[], int n, int phantu)
dưới đây nhận vào ba tham số đó là mảng cần tìm kiếm int a[]
, số lượng phần tử của mảng int n
và phần tử cần tìm kiếm trong mảng int phantu
.
#include
void TimKiem(int a[], int n, int phantu) {
// khai báo biến j để lưu lại kết quả tìm kiếm
int j;
// duyệt mảng bằng vòng lặp for
for(int i = 0; i < n; i++) {
// nếu có phần tử cần tìm kiếm trong mảng
if(phantu == a[i]) {
// gán lại biến lưu địa chỉ j bằng địa chỉ thứ i
j = i;
break;
}
}
// nếu j có giá trị địa chỉ tìm kiếm thì hiển thị kết quả
if(j != NULL || j >= 0) {
printf("TIM THAY PHAN TU %d TAI VI TRI %d", phantu, j);
} else {
printf("KHONG TIM THAY PHAN TU %d", phantu);
}
}
int main() {
// khai báo kích thước mảng n = 10
int n = 10;
// khai báo mảng gồm n phần tử
int a[n] = {11,22,33,44,55,66,77,88,99,10};
// phần tử cần tìm kiếm trong mảng
int phantu = 77;
// gọi hàm tìm kiếm và truyền vào mảng a, số lượng n và phần tử cần tìm kiếm
TimKiem(a, n, phantu);
}
Ta hoàn toàn có thể sử dụng việc nhập xuất giá trị vào mảng trước rồi mới thực hiện công việc tìm kiếm phần tử trong mảng. Chương trình dưới đây cho phép người dùng nhập các giá trị vào mảng sau đó nhập phần tử cần tìm kiếm vào để kiểm tra.
#include
void Nhap(int a[], int n) {
// dùng vòng lặp for duyệt từ vị trí index thứ 0 cho đến vị trí n - 1
for(int i = 0; i <= n - 1; i++) {
// nhập giá trị và gán vào từng phần tử a[i] của mảng
printf("NHAP A[%d]: ", i);
scanf("%d", &a[i]);
}
}
void Xuat(int a[], int n) {
printf("\nCAC PHAN TU CO TRONG MANG\n");
for(int i = 0; i <= n - 1; i++) {
// xuất các phần tử a[i] có trong mảng ra màn hình
printf("A[%d] = %d \n", i, a[i]);
}
}
void TimKiem(int a[], int n, int phantu) {
// khai báo biến j để lưu lại kết quả tìm kiếm
int j;
// duyệt mảng bằng vòng lặp for
for(int i = 0; i < n; i++) {
// nếu có phần tử cần tìm kiếm trong mảng
if(phantu == a[i]) {
// gán lại biến lưu địa chỉ j bằng địa chỉ thứ i
j = i;
break;
}
}
// nếu j có giá trị địa chỉ tìm kiếm thì hiển thị kết quả
if(j != NULL || j >= 0) {
printf("TIM THAY PHAN TU %d TAI VI TRI %d", phantu, j);
} else {
printf("KHONG TIM THAY PHAN TU %d", phantu);
}
}
int main() {
// khai báo kích thước mảng n
int n;
// nhập vào n
printf("NHAP N: ");
scanf("%d", &n);
// khai báo mảng gồm n phần tử
int a[n];
// gọi hàm nhập các phần tử
Nhap(a, n);
// gọi hàm xuất
Xuat(a, n);
// nhập vào phần tử cần tìm kiếm
int phantu;
printf("\nNHAP PHAN TU CAN TIM KIEM: ");
scanf("%d", &phantu);
// gọi hàm tìm kiếm
TimKiem(a, n, phantu);
}
Theo bài viết trên, chúng ta đã tìm hiểu về cách tìm kiếm phần tử có trong mảng. Hy vọng các bạn đã nắm được cách thực hiện và có thể áp dụng trong các bài toán tương tự.