C++ I';我试图从另一个频率数组中构建一个最小堆数组

C++ I';我试图从另一个频率数组中构建一个最小堆数组,c++,arrays,C++,Arrays,我试图从一个数组中构建一个最小堆,其中索引对应于一个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

我试图从一个数组中构建一个最小堆,其中索引对应于一个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;
出于某种原因,当我这样做时,它似乎只正确地填充了数组的一部分,然后用最大频率重复填充其余部分

当我使用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
我真的搞不懂这意味着什么,或者为什么会发生这种情况。
那么,如何将其固定到以数组形式生成最小堆的位置呢?

您将真正受益于
库,可以为您完成所有这些事情。从您发布的输出来看,您只是在重复
堆[0]
的输出。这是一个输入错误还是您的实际输出?此外,似乎有一些情况下,
findMinIndex
可能会返回
index
,而不进行初始化?这是我的实际输出。我使用一个循环反复查找最小值,然后索引,然后将该值设置为0,这样我下次就忽略它,并不断重复。此外,我的教授对使用内置函数为我排序和计数有点奇怪。他喜欢我自己写所有的东西,这太糟糕了,因为我知道有很多更简单的方法可以做到这一点。
heap[1] = 1
heap[2] = 2
heap[3] = 6
heap[4] = 8
heap[0] = 36
heap[0] = 36
heap[0] = 36
heap[0] = 36