I'm working on a sorting visualizer, I've been debugging this for hours. I'm trying to sort an array that is stored in the state.
I've setup a codesandbox here: https://codesandbox.io/s/pensive-villani-kdh17?file=/src/SortingVisualizer/SortingVisualizer.jsx
Can someone show me where I'm going wrong?
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();
};