相关文章推荐
道上混的创口贴  ·  Array.prototype.some() ...·  4 月前    · 
瘦瘦的棒棒糖  ·  OpenCV 4基础篇| ...·  3 月前    · 
憨厚的大脸猫  ·  杀道行者-抖音百科·  1 年前    · 
发怒的芒果  ·  PDMS二次开发应用案例——Pipeline ...·  1 年前    · 
大方的柑橘  ·  solidworks软件 - 商品搜索 - 京东·  2 年前    · 
怕考试的茶壶  ·  萌站是什么 - 百度·  2 年前    · 
沉着的汉堡包  ·  寻味知行:美食节带你吃遍各地美食-汕头大学知行书院·  2 年前    · 
Code  ›  一个优雅的反转数组的算法开发者社区
算法 遍历 数组
https://cloud.tencent.com/developer/article/1176229
严肃的柚子
2 年前
作者头像
我是攻城师
0 篇文章

一个优雅的反转数组的算法

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 我是攻城师 > 一个优雅的反转数组的算法

一个优雅的反转数组的算法

作者头像
我是攻城师
发布 于 2018-08-03 11:00:33
775 0
发布 于 2018-08-03 11:00:33
举报

反转数组指的是把一个倒置,如下:

原始数组:

[1,11,4,2]

` 反转后的数组:

[2,4,11,1]

` 比较简单粗暴的方法是,遍历原始数组从最后一项向前遍历,然后把输出结果保存在一个新的数组里面,这样就完成了所谓的反转。

虽然方法行的通,但性能却一般,更好的办法是通过交换实现,即第一项与最后一项交换,第二项与倒数第二项交换,依次类推,只需要遍历数组的一半的大小交换,就可以完成反转。这种思路有点类似于高斯求和的理论,只不过那里面是相加,我们这里是交换,其中:

遍历的次数=数组的长度/2

这里不分数组的长度是偶数还是奇数,如果是奇数那么中间的一位数是不需要交换的,如果是偶数则刚好对半交换,所以这里交换的次数总是等于(len/2),注意计算机算len/2都是舍一取整:

10/3=3
9/3=3

所以这里刚好就是交换的次数,利用这种方式完成交换比较简单优雅,同时不需要新生成数组空间,直接在原数组上改动即可。

Java版本代码如下:

static void reverseArray(){
        int array[]={1,2,5,4};
        System.out.println("原始数组:"+Arrays.toString(array));
        //数组的长度
        int n=array.length;
        //只需要循环长度的一半的次数即可完成反转
        for (int j = 0; j <n/2 ; j++) {
            int temp=array[j];//获取前半部分数组的每一个元素
 
推荐文章
道上混的创口贴  ·  Array.prototype.some() - JavaScript | MDN
4 月前
瘦瘦的棒棒糖  ·  OpenCV 4基础篇| OpenCV图像基本操作开发者社区
3 月前
憨厚的大脸猫  ·  杀道行者-抖音百科
1 年前
发怒的芒果  ·  PDMS二次开发应用案例——PipelineTool_维图软件pdms插件-CSDN博客
1 年前
大方的柑橘  ·  solidworks软件 - 商品搜索 - 京东
2 年前
怕考试的茶壶  ·  萌站是什么 - 百度
2 年前
沉着的汉堡包  ·  寻味知行:美食节带你吃遍各地美食-汕头大学知行书院
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号