将数组元素顺序向后移m个位置,最后m个数变成最前面的m个数
时间: 2024-10-12 08:07:49 浏览: 11
要将数组元素顺序向后移动 m 个位置,你可以使用两种主要的方法:直接交换或临时存储。这里我会介绍两种简单易懂的方法。
**方法一:直接交换**
这个方法适用于数组长度大于 m 的情况。我们可以通过遍历数组,从最后一个元素开始向前交换 m 个元素到正确的位置。
```c
void reverse_array(int arr[], int n, int m) {
if (n < m) return; // 如果 m 大于数组长度,不需要做任何事情
for (int i = 0; i < m; ++i) {
int temp = arr[n - 1]; // 保存第 (n-i-1) 个元素
arr[n - i - 1] = arr[n - m]; // 将第 (n-m) 个元素放到第 (n-i-1) 位
arr[n - m] = temp; // 将临时变量放回第 (n-m) 个元素位置
}
}
```
**方法二:临时存储**
这种方法适合所有情况(包括 m 等于或大于数组长度),我们创建一个新的数组来暂时存储前半部分的元素,然后用这个新数组替换原数组。
```c
#include <stdio.h>
void reverse_array(int arr[], int n, int m) {
if (n <= m) return; // 如果 m 或者更大,无需操作
int temp[n];
for (int i = 0, j = n - 1; i < m && j >= m; --j, --i) { // 只有当 i < m 且 j >= m 时才进行交换
temp[i] = arr[j];
}
// 将剩余的元素复制回原数组
for (int i = 0, k = m; i < n - m; ++i, ++k) {
arr[i] = temp[k];
}
// 将临时数组的剩余元素放入原数组开头
for (int i = n - m; i < n; ++i) {
arr[i] = temp[i];
}
}
```
执行上述代码后,`arr[]` 就按照要求进行了调整。
阅读全文