Tìm Kiếm Phần Tử Mảng Trong C/C++ - Lập Trình Từ Đầu

1.Cách tìm kiếm phần tử có trong mảng

Hoạt động tìm kiếm phần tử trong 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? 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.

int main(){     //khai bao mang a co 10 phan tu     int a[10] = {11,22,33,44,55,66,77,88,99,10}; }

Tôi sẽ biểu diễn mảng trên theo hình minh họa dưới đây:

Vấn đề đặt ra rằng 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ử đó

Xem hình dưới đây để hiểu rõ hơn về các bước trên:

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.

2.Chương trình tìm kiếm phần tử có trong mảng

Chương trình tìm kiếm phần tử trong mảng được xây dựng hoàn toàn dễ dàng qua 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 <stdio.h> int main(){ //khai bao kich thuoc mang n = 10 int n = 10; //khai bao mang gom n phan tu int a[n] = {11,22,33,44,55,66,77,88,99,10}; //phan tu can tim kiem trong mang int phantu = 77; //khai bao bien j de luu lai ket qua tim kiem int j; //duyet mang bang vong lap for for(int i = 0; i < n; i++){ //neu co phan tu can tim kiem trong mang if(phantu == a[i]){ //gan lai bien luu dia chi j bang dia chi thu i j = i; break; } } //neu j co gia tri dia chi tim kiem thi hien thi ket qua if(j != NULL || j >= 0){ printf("TIM THAY PHAN TU %d TAI VI TRI %d", phantu, j); }else{ printf("\nKHONG THAY PHAN TU %d", phantu, j); } }

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 là int n và phần tử cần tìm kiếm trong mảng là int phantu

#include <stdio.h> void TimKiem(int a[],int n, int phantu){ //khai bao bien j de luu lai ket qua tim kiem int j; //duyet mang bang vong lap for for(int i = 0; i < n; i++){ //neu co phan tu can tim kiem trong mang if(phantu == a[i]){ //gan lai bien luu dia chi j bang dia chi thu i j = i; break; } } //neu j co gia tri dia chi tim kiem thi hien thi ket qua if(j != NULL || j >= 0){ printf("TIM THAY PHAN TU %d TAI VI TRI %d", phantu, j); }else{ printf("\nKHONG THAY PHAN TU %d", phantu, j); } } int main(){ //khai bao kich thuoc mang n = 10 int n = 10; //khai bao mang gom n phan tu int a[n] = {11,22,33,44,55,66,77,88,99,10}; //phan tu can tim kiem trong mang int phantu = 77; //goi ham tim kiem va truyen vao mang a so luong n va phan tu can TimKiem TimKiem(a,n,phantu); } 3.Nhập xuất và tìm kiếm phần tử trong mảng

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 <stdio.h> void Nhap(int a[], int n){ //dung vong lap for duyet tu vi tri index thu 0 cho den vi tri n - 1 for(int i = 0; i <= n - 1; i++){ //nhap gia tri va gan vao tung phan tu a[i] cua mang 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++){ //xuat cac phan tu a[i] co trong mang ra man hinh printf("A[%d] = %d \n" ,i,a[i]); } } void TimKiem(int a[],int n, int phantu){ //khai bao bien j de luu lai ket qua tim kiem int j; //duyet mang bang vong lap for for(int i = 0; i < n; i++){ //neu co phan tu can tim kiem trong mang if(phantu == a[i]){ //gan lai bien luu dia chi j bang dia chi thu i j = i; break; } } //neu j co gia tri dia chi tim kiem thi hien thi ket qua if(j != NULL || j >= 0){ printf("TIM THAY PHAN TU %d TAI VI TRI %d", phantu, j); }else{ printf("\nKHONG THAY PHAN TU %d", phantu, j); } } int main(){ //khai bao kich thuoc mang n int n; //nhap vao n printf("NHAP N: "); scanf("%d",&n); //khai bao mang gom n phan tu int a[n]; //goi ham nhap cac phan tu Nhap(a,n); //goi ham xuat Xuat(a,n); //nhap vao phan tu can them int phantu; printf("\nNHAP PHAN TU CAN TIM KIEM: "); scanf("%d",&phantu); //goi ham tim kiem TimKiem(a,n,phantu); }

Từ khóa » Duyệt Phần Tử Trong Mảng