Javascript 堆如何知道按什么排序?
如果这个问题听起来含糊不清,我深表歉意。我目前正在使用Javascript创建一个A*寻路算法。我有一个对象列表,每个对象都有一个属性f,我想使用minheap数据结构对列表进行排序 我不明白的是如何修改排序的基础。我提到的对象有多个属性,例如h和g。有我不知道的符号吗?我使用npm下载了这个文件 到目前为止,我得到的是:Javascript 堆如何知道按什么排序?,javascript,sorting,heap,priority-queue,heapsort,Javascript,Sorting,Heap,Priority Queue,Heapsort,如果这个问题听起来含糊不清,我深表歉意。我目前正在使用Javascript创建一个A*寻路算法。我有一个对象列表,每个对象都有一个属性f,我想使用minheap数据结构对列表进行排序 我不明白的是如何修改排序的基础。我提到的对象有多个属性,例如h和g。有我不知道的符号吗?我使用npm下载了这个文件 到目前为止,我得到的是: var Heap = require('heap'); var heap = new Heap(); . . . heap.push(start) // start is a
var Heap = require('heap');
var heap = new Heap();
.
.
.
heap.push(start) // start is an object, specifically a Cell inside a grid
if(!heap.empty){
// where I am having trouble
}
我试图替换的代码(出于性能原因)是:
var=0;
对于(var i=0;i
我希望得到任何指导。谢谢。看一下文档,它说如果没有通过构造函数传递比较函数,则使用的数据结构是一个
min heap
。如果要传入函数,堆将根据该函数构建
从
构造函数接收一个比较函数作为可选参数。如果省略,堆将构建为最小堆,这意味着最小的元素将首先弹出
及
如果提供了比较函数,则将根据比较函数的返回值构建堆
这个“比较函数”似乎非常类似于JavaScript.sort()
。使用JavaScript.sort()
,您将传入一个比较两个值的函数,并根据条件返回-1、1或0。这些返回值决定了元素A的索引是上移还是下移,元素B的索引是上移还是下移
资料来源:
另外,查看文档时,如果(!heap.empty())需要是if(!heap.empty())
编辑:
下面是heap文档中的一个示例排序/比较函数。它所做的只是从最小到最大地组织数字
function cmp(a, b) {
return a - b;
}
更重要的是,如果没有提供比较函数,它将使用默认比较,这只是比较两个对象(即
if(x
,等等)。请参阅
function cmp(a, b) {
return a - b;
}