我正在尝试从数组中构建一个数组中的最小堆,其中索引对应于ASCII值,该索引处的值表示频率。
然后我使用这些find min函数来检索最小值
int findMinIndex(int *x){
int a = findMaxValue(x);
int i = 0;
int index;
for(i = 0;i < 128;i++){
if(a > x[i] && x[i] != 0){
a = x[i];
index = i;
}
}
return index;
}
int findMinValue(int *x){
int a = findMaxValue(x);
int i = 0;
for(i = 0;i < 128;i++){
if(a > x[i] && x[i] != 0){
a = x[i];
x[i] = 0;
}
}
return a;
}
在检索这两个值之后,我尝试将它们输入到堆对象数组中
class node{
public:
int occurances;
char val;
};
由于某种原因,当我这样做时,它似乎只是部分正确填充数组,然后重复填充其余的最大频率。
当我使用cout查看数组时我最终得到了这个
heap[1] = 1
heap[2] = 2
heap[3] = 6
heap[4] = 8
heap[0] = 36
heap[0] = 36
heap[0] = 36
heap[0] = 36
我无法弄清楚这意味着什么,或者为什么会这样。 那么如何才能将它修复到最终以数组形式出现的最小堆?