实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置。JAVA实现
时间: 2024-04-14 17:10:41 浏览: 98
C经典算法之Shaker 排序法 - 改良的气泡排序
以下是一个简单的 Java 函数,可以将一个数组循环左移 m 个位置:
```java
public static void rotateLeft(int[] arr, int m) {
int n = arr.length;
m = m % n; // 处理 m 大于 n 的情况
// 反转前 m 个元素
reverse(arr, 0, m - 1);
// 反转剩余的 n-m 个元素
reverse(arr, m, n - 1);
// 反转整个数组
reverse(arr, 0, n - 1);
}
// 反转数组 arr 中下标从 left 到 right 的元素
private static void reverse(int[] arr, int left, int right) {
while (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
```
这个函数的基本思路是反转数组中的元素。首先,我们将前 m 个元素反转,然后将剩余的 n-m 个元素反转,最后再将整个数组反转。这样就能够得到循环左移 m 个位置后的数组了。
举个例子,如果原数组为 `{1, 2, 3, 4, 5}`,要对其进行循环左移 2 个位置,那么首先将前 2 个元素反转得到 `{2, 1, 3, 4, 5}`,然后将剩余的 3 个元素反转得到 `{2, 1, 5, 4, 3}`,最后将整个数组反转得到 `{3, 4, 5, 1, 2}`,这就是循环左移 2 个位置后的数组。
阅读全文