数组反转算法
时间: 2025-05-18 12:05:12 浏览: 20
### JavaScript 中的数组反转
在 JavaScript 中,可以通过内置方法 `reverse()` 来实现数组的反转。此方法会直接修改原始数组,将其元素顺序颠倒[^1]。
```javascript
let array = [1, 2, 3, 4, 5];
array.reverse();
console.log(array); // 输出: [5, 4, 3, 2, 1]
```
对于不希望改变原数组的情况,可以在调用 `reverse()` 方法前创建一个副本:
```javascript
let originalArray = [1, 2, 3, 4, 5];
let reversedArray = [...originalArray].reverse();
console.log(originalArray); // 输出: [1, 2, 3, 4, 5]
console.log(reversedArray); // 输出: [5, 4, 3, 2, 1]
```
---
### 非递归方式的数组反转算法
通过双指针技术可以实现一种高效的原地数组反转算法。该算法的核心思想是从数组两头开始逐步交换元素直到相遇[^3]。这种方法适用于任何类型的数组(如整型或字符型),并且不会额外占用存储空间。
以下是基于 Java 的非递归实现示例:
```java
public static void reverseArrayIterative(int[] arr) {
int start = 0;
int end = arr.length - 1;
while (start < end) {
// 交换 start 和 end 处的元素
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
// 移动指针
start++;
end--;
}
}
```
上述代码同样适用于字符数组或其他数据类型,只需调整参数类型即可。
---
### 递归方式的数组反转算法
除了迭代版本外,还可以采用递归来完成同样的功能。递归函数每次处理一对元素并缩小范围直至条件满足[^2]。
下面是递归版的 Java 实现:
```java
public static void reverseArrayRecursive(int[] arr, int start, int end) {
if (start >= end) {
return;
}
// 交换 start 和 end 处的元素
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
// 继续对剩余部分进行操作
reverseArrayRecursive(arr, start + 1, end - 1);
}
// 调用示例
int[] exampleArray = {1, 2, 3, 4, 5};
reverseArrayRecursive(exampleArray, 0, exampleArray.length - 1);
System.out.println(Arrays.toString(exampleArray)); // 输出: [5, 4, 3, 2, 1]
```
---
### 数组反转的理论基础
无论是使用内置方法还是手动编写逻辑,其核心都是将位于两端的元素互换位置。当数组长度为奇数时,中心元素无需变动;而对于偶数长度,则不存在单独的中心点[^4]。因此,在设计具体方案时需注意边界情况以及效率考量。
#### 时间复杂度分析
- **时间复杂度**: O(n),其中 n 表示数组大小。因为每一步只涉及常量级的操作,并且总共执行约 n/2 次。
- **空间复杂度**: 如果允许就地修改,则可达到 O(1);否则可能需要额外的空间来保存临时变量或者复制整个结构。
---
阅读全文
相关推荐


















