Javascript 使用Vue.js可视化快速排序编程算法(不能处理承诺)

Javascript 使用Vue.js可视化快速排序编程算法(不能处理承诺),javascript,asynchronous,vue.js,async-await,Javascript,Asynchronous,Vue.js,Async Await,我尝试使用Vue.js来可视化快速排序算法,只是出于自我教育的目的,我无法处理async/await。填充和洗牌数组可以很好地工作(尽管它可能实现错误,我不知道) 分类工作很奇怪。我想这是因为递归中的async/await。但实际上我不是程序员,只知道一些基本知识,所以如果有任何帮助,我将不胜感激。代码片段中的代码在您看来可能很难看:) //无保护 var app=新的Vue({ el:“#应用程序”, 数据:{ 努马拉伊:[] }, 方法:{ fillArray:函数(事件){ 对于(var

我尝试使用Vue.js来可视化快速排序算法,只是出于自我教育的目的,我无法处理async/await。填充和洗牌数组可以很好地工作(尽管它可能实现错误,我不知道)

分类工作很奇怪。我想这是因为递归中的async/await。但实际上我不是程序员,只知道一些基本知识,所以如果有任何帮助,我将不胜感激。代码片段中的代码在您看来可能很难看:)

//无保护
var app=新的Vue({
el:“#应用程序”,
数据:{
努马拉伊:[]
},
方法:{
fillArray:函数(事件){
对于(var i=0;i设置超时(r,ms));
};
函数getRandomInt(最小值、最大值){
返回Math.floor(Math.random()*(max-min+1))+min;
}
函数shuffleArray(数组){
var currentIndex=array.length,
时间值,随机指数;
//虽然还有一些元素需要洗牌。。。
而(0!==currentIndex){
//选择剩余的元素。。。
randomIndex=Math.floor(Math.random()*currentIndex);
currentIndex-=1;
//并将其与当前元素交换。
临时值=数组[currentIndex];
集合(数组,currentIndex,数组[randomIndex]);
集合(数组、随机索引、临时值);
}
返回数组;
}
函数快速排序(arr、左、右){
var len=阵列长度,
支点
分区指数;
if(左<右){
枢轴=右;
分区索引=分区(arr、枢轴、左、右);
快速排序(arr,左侧,分区索引-1);
快速排序(arr,分区索引+1,右);
}
返回arr;
}
异步功能分区(arr、pivot、左、右){
var pivotValue=arr[pivot],
partitionIndex=左;
对于(变量i=左;i<右;i++){
if(arr[i]
正文{
字体系列:无衬线;
字体大小:12px;
字号:700;
}
.集装箱{
显示:块;
明确:两者皆有;
溢出:隐藏;
}
艾尔先生{
边框:1px实心浅灰色;
浮动:左;
宽度:2%;
文本对齐:居中;
填充:10px0;
宽度:25px;
边际:0.2px;
}
.btn{
显示:块;
边缘顶部:20px;
明确:两者皆有;
边框:2倍纯色橙色;
文本对齐:居中;
填充顶部:10px;
垫底:10px;
}

JS-Bin
{{item}}

异步
分区
函数确实返回一个承诺,而不是一个整数。您需要等待它,并使
快速排序
异步

async function quickSort(arr, left, right) {
  const len = arr.length;

  if (left < right) {
    const pivot = right;
    const partitionIndex = await partition(arr, pivot, left, right);

    await quickSort(arr, left, partitionIndex - 1);
    await quickSort(arr, partitionIndex + 1, right);
  }
  return arr;
}
异步函数快速排序(arr、左、右){ 常数长度=阵列长度; if(左<右){ 常量轴=右; 常量分区索引=等待分区(arr、枢轴、左、右); 等待快速排序(arr,左,分区索引-1); 等待快速排序(arr,partitionIndex+1,右); } 返回arr; }
应用程序的
sortArray
方法也是如此。

这对我很有效

函数quickSortPromise(arr){
返回新承诺(异步(解析、拒绝)=>{
如果(arr.length<2)解析(arr)
否则{
让[pivot,…arr1]=arr;
让右=[],左=[]
对于(让我来看看arr1){
如果(i<枢轴)向左,则推动(i)
否则正确。按(i)
}
let Sortar=等待承诺。全部([QuickPortPromise(左),QuickPortPromise(右)])
//log(`pivot:${pivot},sortArr:${sortArr}`)
解析([…sortArr[0],pivot,…sortArr[1]])
}
})

}
我在async/await方面没有太多专业知识,但我认为您的
快速排序
函数需要是
异步
,因为它依赖于
分区
(即
异步
)。我认为对
分区
的调用应该有一个
等待
。一些解释将大大提高回答的质量,并帮助将来可能遇到类似问题的其他用户。请花一些时间阅读帮助页