Xem thêm

Cách đảo ngược phần tử trong mảng: Mẹo dễ dàng để sắp xếp

Huy Erick
Bạn đã bao giờ gặp phải tình huống cần đảo ngược thứ tự của các phần tử trong một mảng? Ví dụ như khi bạn muốn sắp xếp các số từ cao đến thấp hoặc...

Bạn đã bao giờ gặp phải tình huống cần đảo ngược thứ tự của các phần tử trong một mảng? Ví dụ như khi bạn muốn sắp xếp các số từ cao đến thấp hoặc từ trái sang phải theo thứ tự ngược lại? Đừng lo lắng, chúng ta có một mẹo đơn giản để thực hiện điều này - đối với các mảng số, hãy thực hiện việc hoán đổi các phần tử từ hai đầu của mảng cho đến khi chúng gặp nhau ở giữa.

Mảng - Khám phá cách đảo ngược phần tử

Việc đảo ngược một mảng chính là việc sắp xếp lại các phần tử theo thứ tự ngược lại. Ví dụ, đối với một mảng (hoặc dãy số) ban đầu có các phần tử là: 1,2,3,4,5,6, nếu ta đảo ngược lại dãy số trên, ta sẽ có: 6,5,4,3,2,1.

Để thực hiện đảo ngược một mảng arr[N]N phần tử, ta chỉ cần thực hiện 2 bước sau:

  • Bước đầu tiên: Khởi tạo chỉ mục bắt đầu và kết thúc, lần lượt là: start = 0, end = N-1.
  • Bước thứ hai: Trong vòng lặp, hoán đổi arr[start] với arr[end] và thay đổi startend như sau: start = start + 1, end = end - 1.

Để hiểu rõ hơn về 2 bước trên, hãy cùng đọc tham khảo phần mã nguồn dưới đây!

#include 

int main(){
    // Số lượng phần tử của mảng
    int N = 6;
    // Khai báo chỉ mục bắt đầu là 0
    int start = 0;
    // Khai báo chỉ mục kết thúc là N - 1
    int end = N - 1;
    // Khai báo mảng
    int arr[6] = {1,2,3,4,5,6};

    // Hiển thị mảng ban đầu
    printf("MẢNG BAN ĐẦU\n");
    for(int i = 0; i < N; i++){
        printf("%d \t",arr[i]);
    }

    // Trong khi start < end thực hiện đảo ngược phần tử
    while (start < end) {
        // Hoán vị phần tử tại vị trí start cho phần tử tại vị trí end
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        // Tăng start
        start++;
        // Giảm end
        end--;
    }

    // Hiển thị mảng sau khi đảo ngược
    printf("\n\nMẢNG ĐƯỢC ĐẢO NGƯỢC\n");
    for(int i = 0; i < N; i++){
        printf("%d \t",arr[i]);
    }
}

Từ chương trình trên, ta có thể xây dựng một hàm để đảo ngược các phần tử có trong mảng (hoặc dãy số) trên. Hàm void DaoNguoc(int arr[], int start, int end) dưới đây nhận vào int arr[] là mảng cần đảo ngược, int start là biến bắt đầu và int end là biến kết thúc để thực hiện việc kiểm tra giá trị phần tử và hoán vị chúng.

#include 

void DaoNguoc(int arr[], int start, int end){
    // Trong khi start < end thực hiện đảo ngược phần tử
    while (start < end) {
        // Hoán vị phần tử tại vị trí start cho phần tử tại vị trí end
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        // Tăng start
        start++;
        // Giảm end
        end--;
    }
}

int main(){
    // Số lượng phần tử của mảng
    int N = 6;
    // Khai báo chỉ mục bắt đầu là 0
    int start = 0;
    // Khai báo chỉ mục kết thúc là N - 1
    int end = N - 1;
    // Khai báo mảng gồm N phần tử
    int arr[N];

    // Nhập phần tử vào mảng
    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("NHẬP A[%d]: ",i);
        scanf("%d",&arr[i]);
    }

    // Hiển thị mảng ban đầu
    printf("\nMẢNG BAN ĐẦU\n");
    for(int i = 0; i <= N - 1; i++){
        // Hiển thị từng phần tử a[i]
        printf("%d \t",arr[i]);
    }

    // Gọi hàm đảo ngược
    DaoNguoc(arr,start,end);

    // Hiển thị mảng sau khi đảo ngược
    printf("\n\nMẢNG ĐƯỢC ĐẢO NGƯỢC\n");
    for(int i = 0; i <= N - 1; i++){
        // Hiển thị từng phần tử a[i]
        printf("%d \t",arr[i]);
    }
}

Thay vì mặc định rằng ta chỉ thực hiện đảo ngược cho mảng arr trên gồm có 6 phần tử là: 1,2,3,4,5,6, ta có thể hoàn toàn xây dựng một chương trình nhập xuất một mảng mới và thực hiện việc đảo ngược mảng đó!

Chúc bạn thực hiện thành công việc đảo ngược các phần tử trong mảng một cách dễ dàng!

1