我正在编写一个需要我使用堆的程序,除了我的排序方法之外,一切都运行良好,显然非常重要!我不确定我的逻辑有什么问题,或者我是否遗漏了一些愚蠢的东西。但是,如果有一双新的眼睛来看待这件事,那就太好了。
函数被传递给我的向量,它当然是堆、根的位置,然后是 STL less 或 greater 作为谓词。
template<class T,class P>
void upheap(vector<T>& v, int start, P func) {
T x = v[start];
while (start > 1 && func(x, v[start/2])) {
v[start] = v[start/2]; start /= 2;
}
v[start] = x;
}
知道有什么问题吗?