อัลกอริทึม เป็นชุดคำสั่งที่ดำเนินการเพื่อแก้ปัญหาที่กำหนด ในที่นี้ เราจะพูดถึงอัลกอริธึมการกลับรายการสำหรับการหมุนอาร์เรย์และสร้างโปรแกรมสำหรับอัลกอริธึมการกลับรายการ
ทีนี้ มาดูคำศัพท์บางคำที่เราจำเป็นต้องรู้เพื่อแก้ปัญหานี้กัน -
อาร์เรย์ − คอนเทนเนอร์ขององค์ประกอบประเภทข้อมูลเดียวกัน ขนาด (จำนวนขององค์ประกอบ) ของอาร์เรย์ได้รับการแก้ไขในขณะที่ประกาศอาร์เรย์
การหมุนอาร์เรย์ − การหมุนอาร์เรย์จะเปลี่ยนลำดับขององค์ประกอบของอาร์เรย์ เพิ่มดัชนีขององค์ประกอบหนึ่งและเปลี่ยนดัชนีขององค์ประกอบสุดท้ายเป็น 0 เป็นต้น
ตัวอย่างการหมุนอาร์เรย์
Array[] = {3, 6, 8,1, 4, 10}
Rotated 2 times gives,
Array[] = {4, 10, 3, 6, 8, 1, 4} อัลกอริธึมการกลับรายการ
อัลกอริธึมหนึ่งสำหรับการหมุนอาร์เรย์คืออัลกอริธึมการกลับรายการ ในอัลกอริธึมนี้ อาร์เรย์ย่อยจะถูกสร้างขึ้นและย้อนกลับเพื่อดำเนินการหมุนอาร์เรย์ สร้างอาร์เรย์ย่อย หมุนทีละรายการ จากนั้นรวมเข้าด้วยกันและย้อนกลับเพื่อให้ได้อาร์เรย์ที่หมุน
อัลกอริทึม
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.
ตัวอย่าง
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. ตัวอย่าง
#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;
} ผลลัพธ์
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