数组旋转反转算法的 C 程序

cserver side programmingprogramming更新于 2024/11/3 3:59:00

算法是一组为解决给定问题而执行的指令。在这里,我们将讨论数组旋转反转算法,并为反转算法创建一个程序。

现在,让我们了解一些解决这个问题需要知道的术语 −

数组 − 相同数据类型元素的容器。数组的大小(元素数量)在声明数组时是固定的。

数组旋转 − 旋转数组就是改变数组元素的顺序。将元素的索引增加一,并将最后一个元素的索引更改为 0,依此类推。

数组旋转示例,

Array[] = {3, 6, 8,1, 4, 10}
旋转 2 次得到,
Array[] = {4, 10, 3, 6, 8, 1, 4}

反转算法

数组旋转的算法之一是反转算法。在此算法中,创建子数组并反转以执行数组的旋转。创建子数组,单独旋转,然后连接在一起并反转回来以获得旋转后的数组。

算法

输入:数组 arr[],需要旋转的位置 r,数组长度 n。
步骤 1:将数组拆分为两个大小为 0 - (d-1) 和 d - (n-1) 的子数组,a1 [d] 和 a2[n-d];
步骤 2:使用反转方法反转两个数组。
步骤 3:将 a1 和 a2 连接回来以获得原始大小的数组。
步骤 4:反转此连接的数组以获得旋转后的数组。
步骤 5:使用标准输出方法打印数组。

示例,

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} // 反转 a1
a2r[] = {5,6,3,8} // 反转 a2
ar[] = {2,4,1,5,6,3,8} // a1r+a2r
arr[] = {8,3,6,5,1,4,2} // 最终答案。

示例

#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("初始数组为:
");    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("
左反转 %d 个元素的数组为:
",d);    for (int i = 0; i < n; i++)       printf("%d ", arr[i]);    return 0; }

输出

初始数组为:
54 67 12 76 25 16 34
左反转 2 个元素的数组为:
12 76 25 16 34 54 67

相关文章