クイックソートの処理をawaitで制御したい
javascript初学者です。どうかよろしくお願いします。
下記コードなんですが、クイックソートを視覚化しようと思い、処理の途中にawaitをいれて再帰関数を作りました。
さらにその再帰関数をpromiseオブジェクトにして、ソートが完了した時点でresolveさせようと思ったのですが、どういう条件でresolveすればいいのかがわかりません。
var arr=[3,6,21,32,43,54,6,57,88,0,4,32,5,8,6];
async function qsort(array,left,right,resolve){
var i,j;
var pivot;
i=left;
j=right;
pivot=array[Math.floor((left+right)/2)];
while(1){
while(array[i]<pivot){
await new Promise((resolve)=>{setTimeout(()=>{resolve()},10)})
i++;
}
while(pivot<array[j]){
await new Promise((resolve)=>{setTimeout(()=>{resolve()},10)})
j--;
}
if(i>=j) break;
await new Promise((resolve)=>{setTimeout(()=>{resolve()},10)})
Swap(array,i,j);
i++;j--;
}
if(left<i-1){
qsort(array,left,i-1,resolve);
}
if(j+1<right){
qsort(array,j+1,right,resolve)
}
if(left>=i-1&&j+1>=right){return resolve();}
}
function Swap(array,i,j){
var temp=array[i];
array[i]=array[j];
array[j]=temp;
}
async function sortTest(){
await new Promise((resolve)=>{qsort(arr,0,arr.length-1,resolve);})//ソートが終わるまで待つ
console.log(arr)//ソート完了後のarrを表示したい
}
sortTest();