我只是在C++中用MaxyHeAPP()函数进行实验。下面的代码通过打印跟踪每次调用bool predicate()时要比较的元素。
#include <iostream>
#include <algorithm>
using namespace std;
// bool predicate function to make a min heap
bool predicate(int a, int b){
cout << a << " " << b << endl;
if(a >= b){ return 1; }
return 0;
}
int main(){
int arr[] = {3,2,1,-1,-2};
make_heap(arr, arr+5, predicate);
return 0;
}
我得到的结果是:
-2-1个
-2 2个
1-2个
2-1个
-13个
但我希望得到以下输出,同时考虑到标准算法:
-2-1个
-2 2个
1-2个
3-2个
2-1个
-13个
有什么帮助吗?
最佳答案
我不想说有一个算法标准化程度足够高,以至于您期望执行特定的一组比较标准化是算法的复杂性,只要比较的数量是线性的,就应该是很好的。此外,就比较次数而言,stl
似乎比您表现得更好,因此您不必担心。
正如注释中所建议的,您始终可以读取编译器使用的std::make_heap
实现的代码,但不能保证在stl
的所有实现中都使用相同的实现。