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]
có 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ớiarr[end]
và thay đổistart
vàend
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!