升序或降序数组的倒序输出

  其实数组倒序输出相对来说还是挺简单的,因为数组已经是有序的了,所以只要循环然后压入一个新数组即可。

  也许你会这样写:

function backSort (arr) {
    var finalArr = [];
    for (var i = arr.length - 1; i >= 0; i --) {
        finalArr.push(arr[i]);
    }
    return finalArr;
}
console.log(backSort([1,2,3,4,5]));

  而没有对数组这种push操作的java,可以这样写:

public void backSort () {
    finalArr = new int[0];
    for(int i = numArr.length - 1; i >= 0; i --) {
        finalArr = joinNewArr(finalArr, numArr[i]);
    }
    numArr = finalArr;
    finalArr = null;
}

public int[] joinNewArr (int[] arr, int num) {
    int[] midArr = new int[arr.length + 1];
    if(arr.length == 0) {
        midArr[0] = num;
    }else {
        System.arraycopy(arr, 0, midArr, 0, arr.length);
        midArr[midArr.length - 1] = num;
    }
    return midArr;
}

  思路无非都是从后向前循环,然后压入新数组打印出来。这是正确的!

  然而通过昨天对快速排序的剖析,我们理解了它的思想:每次循环都通过对首尾两个方向同时进行一次检查。这意味着你一次循环检查首尾两个值,对于循环需要的此数就此减半了有木有,大大提高了效率~

  所以我们引进这种思想,对于这种有序数组的倒叙输出能减少近一半的循环次数,很美妙!

  快来感受一下吧:

function quickToBackSort (arr) {
    var firstSub = 0;
    var lastSub = arr.length - 1;
    while(firstSub < lastSub){
        arr[firstSub] = arr[firstSub] + arr[lastSub];
        arr[lastSub] = arr[firstSub] - arr[lastSub];
        arr[firstSub] = arr[firstSub] - arr[lastSub];
        firstSub++;
        lastSub--;
    }
    return arr;
}

  而且对于java来说,不用频繁的创建新数组,程序运行步骤直接减少巨多有木有啊!

public void quickBackSort () {
    int firstSub = 0;
    int lastSub = numArr.length - 1;

    while(firstSub < lastSub) {
        while(firstSub < lastSub){
            numArr[firstSub] = numArr[firstSub] + numArr[lastSub];
            numArr[lastSub] = numArr[firstSub] - numArr[lastSub];
            numArr[firstSub] = numArr[firstSub] - numArr[lastSub];
            firstSub++;
            lastSub--;
        }
    }
}
时间: 2024-12-29 11:30:25

升序或降序数组的倒序输出的相关文章

2015华为机试—— 输入整型数组和排序标识,对其元素按照升序或降序进行排序

接口说明 原型: void sortIntegerArray(Integer[] pIntegerArray, int iSortFlag); 输入参数: Integer[] pIntegerArray:整型数组 int  iSortFlag:排序标识:0表示按升序,1表示按降序 输出参数: 无 返回值: void 这题比较简单,也没什么思路好说,直接看代码 代码如下: public final class Demo { // 功能:输入整型数组,对其元素按照升序或降序进行排序 // 输入:pI

IT公司100题-14-排序数组中和为给定值的两个数字

问题描述: 输入一个升序排序的数组,给定一个目标值target,求数组的两个数a和b,a+b=target.如果有多个组合满足这个条件,输出任意一对即可. 例如,输入升序数组[1, 3, 4, 5, 13, 17]和目标值20.输出3和17. 分析: 最简单的办法,直接遍历,时间复杂度为O(n^2). 双下标法:low和high a[low]+a[high] < target, low++; a[low]+a[high] > target, high–; a[low]+a[high] == t

分治题目 wikioi 1688 逆序数组 算导2-4

解题报告 算导上给了提示 用归并排序的代码进行修改来实现 思考后不难看出 归并排序的合并(merge)过程中 对数据进行了比较 1)如果数组L 的当前某元素大于数组R的当前元素,那么 由于L数组是有序的(升序) 因此 L数组当前元素以及他后面的所有元素都与R数组构成逆序对 2)我们的排序并不影响逆序对的数量 因为排序的时候不会改变当前被排序的数据和还未被处理的数据之间的位置关系(就是说 排序前在未处理元素左边的数据,排序后还在未处理元素左边,所以不改变逆序对的数量) 严格的证明待以后学好算法导论

一月十日练习习题,1数组数据存入字典并输出2降序 和倒叙 输出数组中内容3对字符串当中信息进行查找是否存在4 把数组当中信息尽心中文排序

// //  main.m //  Pratise_Jan10_1 // //  Created by wangyang on 16/1/10. //  Copyright (c) 2016年 Wangyang. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* 第1题 请将如下数据存储成字典,并将字典

训练三:求任意整数的降序数

题目要求: 对一个五位的任意整数,求出琦降序数 算法提示:将整数的每一位分离到一维整形数组中,再将数组a的元素按照降序排列,最后输出数组元素值, 试建立一个NUM类,完成上述操作 #include<iostream> using namespace std; class NUM { public: NUM(int x);//定义一个带参数的构造函数 void NUM_fengjie(); void NUM_paixu(); void NUM_display(); private: int a[

【python】 倒序输出字符串

By Dolphin , 20150730 Title : 编写一个程序,获取用户输入的一条信息,然后将其倒序输出. Code: # Reverse Word # By Dolphin,20150730 # word = input("Please Enter a word :") # creat a jumble word  jumble = "" position = len(word) - 1 while word and position != -1 : j

java Map排序(升序、降序、随机排序)

基础知识: 1 HashMap会使用key,根据hashcode进行默认排序. 2  LinkedHashMap根据存入先后进行排序 代码展示: 1 随机排序 java Map排序(升序.降序.随机排序),布布扣,bubuko.com

java倒序输出List

先贴代码 package com.tsubasa.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; public class ReversibleArrayList<T> extends ArrayList<T>{ public ReversibleArrayList(Collection&l

DataGridView使用技巧十三:点击列头实现升序和降序排序

DataGridView 列有三种排序模式.每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGridViewColumnSortMode 枚举值之一. DataGridViewColumnSortMode 值说明: Automatic 文本框列的默认排序模式.除非将列标头用于选择,否则单击列标头将自动按此列对 DataGridView 排序,并显示一个指示排序顺序的标志符号(向上的三角箭头:升序排序:向下的三角箭头:降序排序). NotSortable