reactjs - 合并排序未按预期工作反应状态数组
问题描述
我正在开发一个排序可视化工具,我已经调试了好几个小时。我正在尝试对存储在状态中的数组进行排序。
我在这里设置了一个代码框:https ://codesandbox.io/s/pensive-villani-kdh17?file=/src/SortingVisualizer/SortingVisualizer.jsx
有人可以告诉我哪里出错了吗?
mergeSort = async () => {
const { array } = this.state;
const arry = array.slice();
const auxArray = arry.slice();
await this.mergeSortHelper(arry, auxArray, 0, arry.length - 1);
};
mergeSortHelper = async (arry, auxArray, start, end) => {
if (start === end) {
return;
}
const middle = Math.floor((start + end) / 2);
await this.mergeSortHelper(arry, auxArray, start, middle);
await this.mergeSortHelper(arry, auxArray, middle + 1, end);
await this.doMerge(arry, auxArray, start, middle, end);
};
doMerge = async (arry, auxArray, start, middle, end) => {
let a = start; //arry start
let b = start; //auxArray start
let c = middle + 1; //mid start
while (b <= middle && c <= end) {
if (arry[b].height <= arry[c].height) {
arry[a] = auxArray[b];
this.setState({ array: arry });
await sleep(ANIMATION_SPEED_MS);
a++;
b++;
} else {
arry[a] = auxArray[c];
this.setState({ array: arry });
await sleep(ANIMATION_SPEED_MS);
a++;
c++;
}
}
while (b <= middle) {
arry[a] = auxArray[b];
this.setState({ array: arry });
await sleep(ANIMATION_SPEED_MS);
a++;
b++;
}
while (c <= end) {
arry[a] = auxArray[c];
this.setState({ array: arry });
await sleep(ANIMATION_SPEED_MS);
a++;
c++;
}
auxArray = arry.slice();
};
解决方案
我认为您不需要所有这些复杂的功能,只需将这些功能添加到您的代码中并使用它们:
increasingSort = (inputArray) => inputArray.sort((a, b) => a.height - b.height)
decreasingSort = (inputArray) => inputArray.sort((a, b) => b.height - a.height);
推荐阅读
- xml - 在 XML 文件中用“>”替换“>”是绝对必要的吗?
- flutter - flutter CheckedPopupMenuItem 选择项目后保持菜单打开
- c++ - QToolButton 在按下 Alt 后显示菜单
- npm - 由于代理限制,无法在反应中运行 npm install 命令
- java - Applovin 横幅不显示
- c# - wpf中多个窗口上的KeyBinding
- python - 使用 pytesseract 的段落边界框
- sql - SQL server sp_executesql 查询错误
- javascript - 使用渲染功能为 todo 添加新任务 react
- java - 在tomcat中关闭浏览器以进行websocket连接时刷新时在tomcat控制台中引发错误