【发布时间】:2021-04-23 07:45:15
【问题描述】:
我第一次使用辅助数组实现了归并排序,以尝试使用 JavaScript 进行可视化。似乎它应该工作,但事实并非如此。任何帮助或提示将不胜感激。
const merge = (array, auxArray, start, mid, end) => {
let k = start;
let i = start;
let j = mid + 1;
while (i <= mid && j <= end) {
if (auxArray[i] <= auxArray[j]) {
array[k++] = auxArray[i++];
} else {
array[k++] = auxArray[j++];
}
}
while(i <= mid) {
array[k++] = auxArray[i++];
}
while(j <= end) {
array[k++] = auxArray[j++];
}
}
const mergeSortHelper = (array, auxArray, start, end) => {
if (start === end) {
return;
}
let mid = Math.floor((start + end)/2);
mergeSortHelper(array, auxArray, start, mid);
mergeSortHelper(array, auxArray, mid + 1, end);
merge(array, auxArray, start, mid, end);
}
const mergeSort = (array) => {
let auxArray = array.slice();
mergeSortHelper(array, auxArray, 0, array.length - 1);
};
编辑:我忘了包括它不起作用的情况。他们在这里:
输入:[4, 2, 5, 6, 7, 7] 输出:[4, 2, 5, 6, 7, 7]
输入:[6, 6, 6, 4, 6, 2] 输出:[4, 6, 6, 6, 6, 2]
输入:[6, 7, 3, 10, 7, 9, 6, 3, 4, 6] 输出:[6, 7, 3, 9, 6, 3, 4, 6, 10, 7]
它对所有大小的数组都给出了相似的结果,但似乎对大小为 2 的数组给出了正确的结果。
我在初始化数组(比如a)后调用mergeSort 函数,使用mergeSort(a),然后通过将数组a 记录到控制台来检查它是否已排序。该数组应该是排序的,但它不是。大多数时候数组保持不变,但有时数组略有不同但未排序。
【问题讨论】:
-
对不起,我最初应该添加这些信息,现在我已经添加了。它没有像预期的那样排序。
-
考虑将
console.log()语句添加到您的程序中,以便您可以观察程序流程。 -
我尝试在每次递归调用时使用
console.log()记录start、mid和end值,它们似乎是正确的。我也尝试在每次递归调用时记录整个列表,但我无法确定哪里出错了。
标签: javascript sorting mergesort