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);
}