数组循环左移
时间: 2023-09-03 17:16:34 浏览: 161
数组循环左移可以通过以下步骤实现:
1. 将数组中前k个元素逆序排列,将数组中剩余的元素逆序排列;
2. 将整个数组逆序排列。
其中,k为需要循环左移的元素个数。
下面是一个示例代码实现:
```
void leftRotate(int arr[], int n, int k) {
reverse(arr, arr + k);
reverse(arr + k, arr + n);
reverse(arr, arr + n);
}
```
其中,`reverse`函数是STL中的函数,用来将一个区间内的元素逆序排列。
相关问题
数组循环左移c语言pta
可以使用以下代码实现数组循环左移:
```c
#include <stdio.h>
void leftShift(int arr[], int n, int k) {
k %= n; // 处理 k 大于 n 的情况
for (int i = 0; i < n; i++) {
printf("%d ", arr[(i + k) % n]);
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int k = 2;
leftShift(arr, n, k);
return 0;
}
```
输出结果为:3 4 5 1 2
数组循环左移c++代码
以下是使用C语言实现数组循环左移的代码:
```c
#include <stdio.h>
void rotateLeft(int arr[], int n, int k) {
k = k % n;
for(int i = 0; i < k; i++) {
int temp = arr[0];
for(int j = 0; j < n - 1; j++) {
arr[j] = arr[j + 1];
}
arr[n - 1] = temp;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
printf("Original array: ");
for(int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
rotateLeft(arr, n, k);
printf("\nArray after %d rotations: ", k);
for(int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在上面的代码中,我们首先定义了一个 `rotateLeft()` 函数,它接受三个参数:一个整数数组 `arr`、数组的大小 `n` 和要左移的次数 `k`。我们使用模运算符来确保 `k` 的值小于 `n`。
接下来,我们使用两个循环来实现数组的循环左移。外层循环用于执行 `k` 次循环左移操作,内层循环用于实现一次循环左移。在内层循环中,我们将数组中的每个元素向左移动一位,最后将第一个元素移动到数组的末尾。
在 `main()` 函数中,我们首先定义了一个整数数组 `arr` 和要左移的次数 `k`,然后调用 `rotateLeft()` 函数,并打印出移动前和移动后的数组。