У меня есть таблица, которая содержит теоретическую скорость чего-то (id = ratebaseX) и фактическую наблюдаемую скорость чего-то (id = rateseenX). У меня есть javascript, который проходит через каждую пару и просто вычисляет разницу (id = calcX).Bubble sort on elements
После вычисления этой разницы я хотел бы сделать сортировку пузырьков в массиве calcIDs на основе этой расчетной разницы. Я действительно не хочу менять html или что-нибудь в классе calcIDs, просто индекс в массиве.
Для тестов я выгружаю первые три элемента массива в окно предупреждения, потому что знаю, что они изначально не в порядке.
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 acatally - массив указателей?
Чтобы сами элементы HTML были перемещены, вам нужно будет * удалить их, а затем * добавить их обратно в правильном порядке. –
Если это не для задания, в котором вам необходимо реализовать сортировку пузырьков, я не могу думать о худшем выборе алгоритма. Если вы просто после сортировки массива, ваш лучший выбор - использовать метод sort() класса Array. –
@MattBurland - 'удалить их, а затем добавить их' - добавление их удаляет их из исходного местоположения, поэтому это не совсем правильно: D –