簡體   English   中英

氣泡按元素排序

[英]Bubble sort on elements

我有一張表,其中包含某些事物的理論速率(id = ratebaseX)和某些事物的實際觀察速率(id = rateseenX)。 我有一個遍歷每對的javascript,可以簡單地計算出差異(id = calcX)。

計算完此差異后,我想根據此計算出的差異對calcIDs數組進行冒泡排序。 我實際上並不想更改calcIDs類中的html或任何東西,而只是更改數組中的索引。

對於測試,我將前三個數組元素轉儲到警報框中,因為我知道它們最初是亂序的。

function calcLikelihood(){
    ratebaseIDs = document.querySelectorAll('[id^="ratebase"]');
    rateseenIDs = document.querySelectorAll('[id^="rateseen"]');
    calcIDs = document.querySelectorAll('[id^="calc"]');

    for(i=0;i<calcIDs.length;i++){
        likelihood = Math.round((ratebaseIDs[i].innerHTML - rateseenIDs[i].innerHTML)*100)/100;
        calcIDs[i].innerHTML = likelihood;
        calcIDs[i].likelihood = likelihood;
    }
    //bubble sort based on likelihood
    for(i=0;i<calcIDs.length;i++){
        for(j=0;j<(calcIDs.length-1);j++){
            if(calcIDs[j].likelihood<calcIDs[j+1].likelihood){
                temp = calcIDs[j];
                calcIDs[j] = calcIDs[j+1];
                calcIDs[j+1] = temp;
            }
        }
    }
    alert("0) " + calcIDs[0].likelihood +"\n1) " + calcIDs[1].likelihood+"\n2) " + calcIDs[2].likelihood);
}

問題在於前三個元素不會移動。 我很確定我對氣泡的排序是正確的。 我認為問題是calcIDs實際上是一個指針數組?

您的氣泡排序沒問題,我檢查了一下:

 var calcIDs = [{likelihood: 84}, {likelihood: 56}, {likelihood: 68}, {likelihood: 81}]; //bubble sort based on likelihood for(i=0;i<calcIDs.length;i++){ for(j=0;j<(calcIDs.length-1);j++){ if(calcIDs[j].likelihood<calcIDs[j+1].likelihood){ temp = calcIDs[j]; calcIDs[j] = calcIDs[j+1]; calcIDs[j+1] = temp; } } } console.log("0) " + calcIDs[0].likelihood +"\\n1) " + calcIDs[1].likelihood+"\\n2) " + calcIDs[2].likelihood); // 84, 81, 68 

因此,我認為問題在於document.querySelectorAll不返回數組。 它返回類型為 NodeList的對象,而您通常只能在JS中對真實數組進行排序。 我的意思是您可以對集合應用排序算法,但是“已排序”的項目將以與排序之前相同的預定義順序顯示。 一個簡單的解決方法可能是將節點集合轉換為實際的數組,如下所示:

var arr = Array.prototype.slice.call(nodes); // nodes = document.querySelectorAll(".your_selector");

然后您將能夠應用排序並獲得期望的結果。 可以滿足您的目的,因為您聲明不想更改視圖。 我希望這個較晚的答案有幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM