升序或降序數組的倒序輸出


  其實數組倒序輸出相對來說還是挺簡單的,因為數組已經是有序的了,所以只要循環然后壓入一個新數組即可。

  也許你會這樣寫:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM