相关文章推荐
温柔的鞭炮  ·  德雷克海峡_百度百科·  6 月前    · 
不要命的野马  ·  期待经典晨星亚太科幻电影工业大赛进行时_科普中国网·  10 月前    · 
要出家的吐司  ·  File:五菱宏光mini EV 9736 ...·  10 月前    · 
留胡子的鸵鸟  ·  [广西日报] 从荒野走向世界: ...·  1 年前    · 
高大的蛋挞  ·  2014年农村专项自主选拔拟录取名单公示-西 ...·  1 年前    · 
小百科  ›  一个简约的探底回升数组的算法-腾讯云开发者社区-腾讯云
算法 遍历 数组
严肃的柚子
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];//获取前半部分数组的每一个元素
 
推荐文章
温柔的鞭炮  ·  德雷克海峡_百度百科
6 月前
不要命的野马  ·  期待经典晨星亚太科幻电影工业大赛进行时_科普中国网
10 月前
要出家的吐司  ·  File:五菱宏光mini EV 9736 1.jpg - Wikimedia Commons
10 月前
留胡子的鸵鸟  ·  [广西日报] 从荒野走向世界: 龙脊梯田的华丽转身- 媒体声音- 广西 ...
1 年前
高大的蛋挞  ·  2014年农村专项自主选拔拟录取名单公示-西南交通大学本科招生网
1 年前
Link管理   ·   Sov5搜索   ·   小百科
小百科 - 百科知识指南