1.Cách đảo ngược phần tử trong mảng

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

Cách đảo ngược phần tử trong mảng (hay dãy số) các bạn có thể xem ở hình dưới đây:

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

  • Bước đầu tiên: Khởi tạo chỉ mục bắt đầu và kết thúc đó 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 start và end như sau: start = start +1, end = end – 1

Để hiểu rõ hơn 2 bước trên, các bạn cùng đọc tham khảo phần code ở dưới đây!

2.Chương trình đảo ngược phần tử trong mảng

Chương trình dưới đây, thực hiện lại 2 bước để đảo ngược mảng mà tôi đã đề cập ở trên.Các bạn vui lòng vừa đọc code và vừa đọc lại 2 bước trên để hiểu rõ hơn thuật toán!

#include <stdio.h>
int main(){
    //so luong phan tu cua mang
    int n = 6;
    //khai bao start = 0;
    int start = 0;
    //khao bao end = n - 1
    int end = n - 1;
    //khai bao mang
    int arr[6] = {1,2,3,4,5,6};
    
    //hien thi mang ban dau
    printf("MANG BAN DAU\n");
    for(int i = 0; i < n; i++){
        printf("%d \t",arr[i]);
    }
    
    //trong khi start < end thuc hien dao nguoc phan tu
    while (start < end)
    {
        //hoan vi phan tu tai vi tri start cho phan tu tai vi tri end
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        //tang start
        start++;
        //giam end
        end--;
    }
    
    //hien thi mang duoc dao nguoc
    printf("\n\nMANG DUOC DAO NGUOC\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 (hay 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 cho việc kiểm tra giá trị phần tử và hoán vị chúng:

#include <stdio.h>
void DaoNguoc(int arr[], int start, int end){
    //trong khi start < end thuc hien dao nguoc phan tu
    while (start < end)
    {
        //hoan vi phan tu tai vi tri start cho phan tu tai vi tri end
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        //tang start
        start++;
        //giam end
        end--;
    }
}
int main(){
    //so luong phan tu cua mang
    int n = 6;
    //khai bao start = 0;
    int start = 0;
    //khao bao end = n - 1
    int end = n - 1;
    //khai bao mang
    int arr[6] = {1,2,3,4,5,6};
    
    //hien thi mang ban dau
    printf("MANG BAN DAU\n");
    for(int i = 0; i < n; i++){
        printf("%d \t",arr[i]);
    }
    
    //goi ham dao nguoc
    DaoNguoc(arr,start,end);
    
    //hien thi mang duoc dao nguoc
    printf("\n\nMANG DUOC DAO NGUOC\n");
    for(int i = 0; i < n; i++){
        printf("%d \t",arr[i]);
    }
}

3.Nhập xuất và đảo ngược phần tử trong mảng

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, thì 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 đó!

#include <stdio.h>
void Nhap(int arr[], 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",&arr[i]);
    }
}

void Xuat(int arr[], int n){
    for(int i = 0; i <= n - 1; i++){
        //hien thi tung phan tu a[i]
        printf("%d \t",arr[i]);
    }
}

void DaoNguoc(int arr[], int start, int end){
    //trong khi start < end thuc hien dao nguoc phan tu
    while (start < end)
    {
        //hoan vi phan tu tai vi tri start cho phan tu tai vi tri end
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        //tang start
        start++;
        //giam end
        end--;
    }
}
int main(){
    //so luong phan tu cua mang
    int n;
    printf("NHAP N: ");
    scanf("%d",&n);
    //khai bao start = 0;
    int start = 0;
    //khao bao end = n - 1
    int end = n - 1;
    //khai bao mang gom N phan tu
    int arr[n];
    //nhap phan tu vao mang
    Nhap(arr,n);
    //xuat mang
    printf("MANG BAN DAU\n");
    Xuat(arr,n);
    //goi ham dao nguoc
    DaoNguoc(arr,start,end);
    printf("\n\nMANG DUOC DAO NGUOC\n");
    Xuat(arr,n);
}