首页 > 代码库 > 升序或降序数组的倒序输出

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

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

  也许你会这样写:

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--;
        }
    }
}

 

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