Một thuật toán là một tập hợp các hướng dẫn được thực hiện để giải quyết vấn đề đã cho. Ở đây, chúng ta sẽ thảo luận về thuật toán đảo ngược để xoay mảng và tạo chương trình cho thuật toán đảo ngược.
Bây giờ, hãy đến với một số thuật ngữ mà chúng ta cần biết để giải quyết vấn đề này -
Mảng - Một vùng chứa các phần tử của cùng một kiểu dữ liệu. Kích thước (số phần tử) của mảng được cố định tại thời điểm khai báo mảng.
Xoay mảng - Xoay mảng là thay đổi thứ tự các phần tử của mảng. Tăng chỉ số của phần tử lên một và thay đổi chỉ số của phần tử cuối cùng thành 0, v.v.
Ví dụ về xoay mảng,
Array[] = {3, 6, 8,1, 4, 10} Rotated 2 times gives, Array[] = {4, 10, 3, 6, 8, 1, 4}
Thuật toán đảo ngược
Một trong những thuật toán xoay mảng là thuật toán đảo chiều. Trong thuật toán này, các mảng con được tạo ra và đảo ngược để thực hiện việc xoay mảng. Các mảng con được tạo, xoay riêng lẻ, sau đó nối với nhau và đảo ngược trở lại để có được mảng được xoay.
Thuật toán
Input : array arr[] , positions that are needed to be rotated r , length of array n. Step 1: Split the array into two sub arrays of 0 - (d-1) and d - (n-1) size, a1 [d] and a2[n-d]; Step 2: Reverse both arrays using the reverse method. Step 3: Join a1 and a2 back to get an array of original size. Step 4: Reverse this joined array to get the rotated array. Step 5: Print the array using the standard output method.
Ví dụ,
arr[] = {1 ,4, 2, 8, 3, 6, 5}, d = 3, n = 7 a1[] = {1,4,2} ; a2 = {8,3,6,5} a1r[] = {2,4,1} // reversed a1 a2r[] = {5,6,3,8} // reversed a2 ar[] = {2,4,1,5,6,3,8} // a1r+a2r arr[] = {8,3,6,5,1,4,2} // final answer.
Ví dụ
#include <stdio.h> void reverse(int arr[], int start, int end){ int temp; while (start < end) { temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } int main(){ int arr[] = { 54, 67, 12, 76, 25, 16, 34 }; int n = 7; int d = 2; printf("The initial array is :\n"); for (int i = 0; i < n; i++) printf("%d ", arr[i]); reverse(arr, 0, d - 1); reverse(arr, d, n - 1); reverse(arr, 0, n - 1); printf("\nThe left reversed array by %d elements is:\n",d); for (int i = 0; i < n; i++) printf("%d ", arr[i]); return 0; }
Đầu ra
The initial array is : 54 67 12 76 25 16 34 The left reversed array by 2 elements is: 12 76 25 16 34 54 67