【发布时间】:2016-04-13 09:16:32
【问题描述】:
我有一个表格,其中包含某事物的理论速率 (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 实际上是一个指针数组?
【问题讨论】:
-
要移动 HTML 元素本身,您必须删除它们,然后按正确的顺序追加它们。
-
除非这是针对您特别需要实现冒泡排序的任务,否则我想不出更糟糕的算法选择。如果你只是想对数组进行排序,最好的选择是使用 Array 类的 sort() 方法。
-
@MattBurland -
remove them and then append them- 附加它们会将它们从原始位置删除,因此,这并不完全正确:D -
不仅正如@JonTrauntvein 所说,还有更好的方法来对数组进行排序而不是自己实现冒泡排序(并且可能会出错),还有可用的 javascript 库可以创建可排序的表你。
-
@Neofish:w3schools 很少是一个好的链接。 MDN 链接通常要好得多。
标签: javascript arrays sorting bubble-sort