Bài tập

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

Huy Erick

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...

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ự.

1