Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 堆如何知道按什么排序?_Javascript_Sorting_Heap_Priority Queue_Heapsort - Fatal编程技术网

Javascript 堆如何知道按什么排序?

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

如果这个问题听起来含糊不清,我深表歉意。我目前正在使用Javascript创建一个A*寻路算法。我有一个对象列表,每个对象都有一个属性f,我想使用minheap数据结构对列表进行排序

我不明白的是如何修改排序的基础。我提到的对象有多个属性,例如hg。有我不知道的符号吗?我使用npm下载了这个文件

到目前为止,我得到的是:

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;
}