C++ 数组旋转的翻转算法

17 Mar 2025 | 4 分钟阅读

问题陈述: 给定一个数组,您的任务是按给定的整数次数将数组旋转一步。旋转数组意味着将数组的第一个元素移动到数组的末尾,这样第一个元素就出现在最后一个位置,而其他每个元素都向左移动。

为了更清楚地说明,我们可以这样理解这个问题。首先,取出索引为 0 的元素,然后索引为 1 的元素向左移动,这意味着它将占据索引 0。同样,索引为 2 的元素将占据索引 1。通过这种方式,所有元素都将向左移动,最后一个索引将变为空闲,因此这个索引将被最初从数组中取出的第一个元素替换。这个整个操作应该重复给定的次数。

输入格式

整数数组 int[] array

旋转次数 n

输出

打印 n 次旋转后的数组

示例说明

数组 = {10, 20, 30, 40, 50, 60, 70, 80}

次数 = 4;

初始数组:{10, 20, 30, 40, 50, 60, 70, 80}

一次旋转后:{20, 30, 40, 50, 60, 70, 80, 10}

第二次旋转后:{30, 40, 50, 60, 70, 80, 10, 20}

第三次旋转后:{40, 50, 60, 70, 80, 10, 20, 30}

第四次旋转后:{50, 60, 70, 80, 10, 20, 30, 40}

示例

上述问题的解决方案如下所示

输出

Reversal algorithm for Array rotation in C++

说明

这个程序包含两个函数:一个是 main 函数,另一个是用于反转数组的函数。这个程序用于旋转数组。首先,程序要求用户输入数组的长度。之后,它要求用户输入要存储在数组中的元素。输入元素后,它要求输入对数组进行旋转的次数。现在,我们调用名为 reverseFunction 的函数,它接受三个参数:整数数组起始索引结束索引。因此,这个 reverseFunction 用于从起始索引到结束索引反转给定的整数数组。第一次调用时,参数是数组、零、以及比旋转次数小一的数。然后,再次调用 reverseFunction,参数是数组、旋转次数、以及比数组大小小一的数。之后,最后一次调用 reverseFunction,参数是整数数组、零、以及比数组大小小一的数。完成这一步后,数组将被旋转,然后将打印出结果数组。

reverseFunction 的功能。它接受一个数组和两个索引作为输入。使用一个 while 循环,它交换第一个和最后一个索引处的元素,并向中心移动。这个过程有效地反转了这些索引之间的数组部分。通过迭代交换元素,直到第一个和最后一个索引相遇,该函数实现了完全反转。这种方法基于简单的交换逻辑,展示了计算机编程中广泛用于数组操作和旋转等任务的基本技术。其效率在于其直接的方法,使其在数组反转操作中既直观又实用。

结论

总之,这个 C++ 程序使用反转算法高效地将数组旋转指定的位数。它提供了一个直观的用户界面,允许无缝输入并准确地展示旋转后的数组。该代码清晰地展示了对数组操作技术的理解,提供了一个实用的解决方案。