Я пробовал целый день и, похоже, не могу понять, почему он не работает. Я думаю, что проблема заключается в моих навыках с языком JavaScript. Возможно, мне не хватало какой-то концепции передачи параметров. Не могли бы вы показать мне, где ошибка?Почему эта реализация скрипта jquery Sort Merge не работает?
Вот моя реализация, основанная на другой реализации, которую я написал год назад в C#, который можно найти here.
Так вот код (вы можете попробовать прямо на консоли Chromes, просто копировать/вставить, и он будет "работать"):
function merge(A, p, q, r){
var n1 = q - p + 1;
var n2 = r - q;
var i = 0;
var j = 0;
var L = [];
while (i < n1){
L.push(A[p + i++]);
}
var R = [];
while(j < n2){
R.push(A[q + j++ + 1]);
}
L.push(Number.MAX_VALUE);
R.push(Number.MAX_VALUE);
i = 0;
j = 0;
var k = p;
while(k <= r){
if(L[i] <= R[i]){
A[k] = L[i];
i = i + 1;
}else{
A[k] = R[j];
j = j + 1;
}
k = k + 1;
}
}
function mergeSort(A, p, r){
console.log(A);
if(p < r){
var q = Math.floor((p + r)/2);
mergeSort(A, p, q);
mergeSort(A, q + 1, r);
merge(A, p, q, r);
}
}
function testMergeSort(array){
var p = 0;
var r = array.length - 1;
console.log("BEFORE: " + array);
mergeSort(array, p, r);
console.log("AFTER: " + array);
console.log("---------------------------------");
}
testMergeSort([5, 2, 4, 7, 1, 3, 2, 6]);
Я не проверил ваш код должным образом, но могу сказать, что он слишком длинный. Объединение должно быть реализовано в гораздо меньших количествах. – kay
@Kay; Алгоритм сортировки слиянием = 5 строк, остальное, как вы не заметили, - это тестовый код. Алгоритм слияния такой же, как описано в «Введение в алгоритмы» (http://www.amazon.com/Introduction-Algorithms-Second-Edition-Thomas/dp/0262032937). Вы также можете увидеть код здесь: http://renatogama.com/blog/imagens/algoritmo-de-merge.png – renatoargh
Ваши имена переменных плохо выбраны. Они могут сэкономить несколько нажатий клавиш для вас, но сделайте ваш код почти непонятным для остальных из нас ... –