我正在做泡泡排序的可视化算法,想用线图来展示做空的过程。
我已尝试实现computed属性,但浏览器挂起。
<template>
<div class="hello">
<h1>Bubble Sort</h1>
<p>{{ bubbleSort()}}</p>
<line-chart :data="bubbleSort()"></line-chart>
</div>
</template>
<script>
export default {
name: "HelloWorld",
data() {
return {
a : [12, 0, 4, 546, 122, 84, 98, 64, 9, 1, 3223, 455, 23, 234, 213]
}
},
methods : {
bubbleSort: function () {
let swapped;
do {
swapped = false;
for(var i = 0; i < this.a.length; i++){
if(this.a[i] > this.a[i+1]){
let temp = this.a[i];
this.a[i] = this.a[i+1];
this.a[i+1] = temp;
swapped = true;
}
}
}while(swapped);
return Object.assign({},this.a);
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
</style>
我希望图表在做空发生时更新。
1条答案
按热度按时间wz3gfoph1#
使用计算属性不是实现冒泡排序可视化的最佳方法,原因有二:
a
更改时都会重新计算计算属性,并且您正在更改计算属性本身中的a
的值;这可能是导致浏览器挂起的原因。由于您没有在模板中直接使用
a
,并且computed属性只有一个依赖项a
,因此不需要删除computed属性。相反,创建一个函数来完成冒泡排序算法的一次传递,并在
setInterval
中调用该函数,当传递时交换次数为0时取消循环:备注:
$set
。请参见https://v2.vuejs.org/v2/guide/list.html#Caveats。a
是一个很难描述变量名,请尝试给予它一个更有意义且唯一的名称。