Java数组元素反转:详解双指针交换算法

823 字
4 分钟
Java数组元素反转:详解双指针交换算法

数组元素反转#

需求:某个数组有5个数据:10,20,30,40,50,请将这个数组中的数据进行反转。
[10, 20, 30, 40, 50] 反转后 [50, 40, 30, 20, 10]

数组元素反转的核心,其实是数组中两个数据的交换。我们可以认为两个数据分别存储在两个水杯中。想要交换两个水杯中的东西,我们得借助第三个水杯,如下图所示

数据交换原理
数据交换原理

交换步骤
交换步骤

数组中元素交换,就是用的借用第三方变量的思想。我们把数组中的每一个元素当做一个水杯,然后索引控制哪两个元素互换位置。

怎么样,才能达到元素反转的效果呢?我们只需将第一个和最后一个元素互换、第二个和倒数第二个互换、依次内推… 如下图所示

数组反转过程
数组反转过程

代码实现#

怎么样写代码,才能达到上面的效果呢?我们继续分析

1.每次交换,需要有左右两边的两个索引,我们可以用i和j表示
刚开始i=0,j=数组长度-1;
2.每次让i和j索引位置的两个元素互换位置
arr[i]和arr[j]互换位置
3.每次还完位置之后,让i往右移动一位,让j往前移动一位

具体代码如下

public class Test2 {
public static void main(String[] args) {
// 目标:完成数组反转。
// 1、准备一个数组
int[] arr = {10, 20, 30, 40, 50};
// 2、定义一个循环,设计2个变量,一个在前,一个在后
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
// arr[i] arr[j]
// 交换
// 1、定义一个临时变量记住后一个位置处的值
int temp = arr[j];
// 2、把前一个位置处的值赋值给后一个位置了
arr[j] = arr[i];
// 3、把临时变量中记住的后一个位置处的值赋值给前一个位置处
arr[i] = temp;
}
// 3、遍历数组中的每个数据,看是否反转成功了
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}

执行流程详解#

第一步:初始化#

  • i = 0j = 4(数组长度 - 1)
  • 数组:[10, 20, 30, 40, 50]

第二步:第一次交换#

  • 交换 arr[0]arr[4]:10 ↔ 50
  • 数组变为:[50, 20, 30, 40, 10]
  • i++i = 1j--j = 3

第三步:第二次交换#

  • 交换 arr[1]arr[3]:20 ↔ 40
  • 数组变为:[50, 40, 30, 20, 10]
  • i++i = 2j--j = 2

第四步:循环结束#

  • i >= j 时,循环结束
  • 最终数组:[50, 40, 30, 20, 10]

关键点总结#

  1. 双指针技术:使用两个指针从数组两端向中间移动
  2. 临时变量:借助第三个变量实现元素交换
  3. 循环条件i < j 确保不会重复交换
  4. 时间复杂度:O(n),其中 n 是数组长度
  5. 空间复杂度:O(1),只使用了常数级别的额外空间

总结#

通过上面的案例,需要我们掌握元素互换位置的编程思路;以后遇到数据互换问题,都这样做。这是数组操作中的经典算法,也是理解更复杂算法的基础。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Java数组元素反转:详解双指针交换算法
https://v7w.cn/posts/java-array-reverse/
作者
枫诀宝贝
发布于
2026-04-01
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
Java数组
Java 本文深入解析Java编程中最基础的数据结构——数组。内容涵盖数组的核心概念、静态与动态两种初始化方式及其内存原理图解,详细讲解了如何通过索引访问与修改元素、使用for循环实现数组遍历,并结合"计算销售总额"与"评委打分系统"两个实战案例,演示了数组在实际开发中的应用,助你夯实Java基础。
2
Java方法详解:从入门到实战,掌握代码复用的核心
Java 本文全面解析Java方法(Method)的核心概念与实战应用。内容涵盖方法的定义、调用、参数传递机制(值传递与引用传递)及返回值处理,深入剖析方法重载(Overloading)的规则与最佳实践。此外,文章还通过实战案例演示了方法的内存执行流程,并介绍了Arrays工具类与可变参数的使用技巧,助你写出结构清晰、高复用性的Java代码。
3
JAVA常用结构语句
Java 本文详解Java核心控制流语句,涵盖for、while、do…while循环与if…else、switch case条件判断,并介绍增强for循环及跳转语句,助你掌握高效代码构建逻辑。
4
Java JSON 序列化库详解:Jackson、Gson、Fastjson
Java 本文详细介绍 Java 生态中三种最流行的 JSON 处理库:Jackson、Gson 和 Fastjson。内容将涵盖它们的基本用法、高级特性、性能对比、优缺点分析以及最终的选型建议。目标读者是需要为项目选择 JSON 库或希望深入了解这些库区别的 Java 开发者。
5
2026年SEO优化终极指南:从算法原理到排名飙升的实操策略
网站优化 想知道如何优化网站 SEO 吗?本篇 2026 年最新 SEO 全面指南,将为你详细解析关键词研究,内容优化,外链策略与技术 SEO,让你的网站轻松登上首页!
随机文章 随机推荐
Profile Image of the Author
枫诀宝贝
以代码为任,解剖数字混沌。
站点统计
文章
17
分类
12
标签
63
总字数
33,399
运行时长
0
最后活动
0 天前

目录