构建堆

Building a Heap

我正在尝试用字符数组构建最大堆。这是我的一段代码...

int arr_pos;
char inputArr[1000][51];

int buildMaxHeap(){
    int i;
    printf("test#1");
    for(i = arr_pos/2; i >= 0; i--){
        maxHeapify(i, arr_pos);
    }

    return 0;
}

void maxHeapify(int i, int heapsize){
    int largest, right, left;
    char *temp;
    left = 2*i + 1;
    right = 2*i + 2;
    if(left >= heapsize)
        return;
    else{
        if(left < (heapsize) && inputArr[left] > inputArr[i])
            largest = left;
        else
            largest = i;
        if(right < (heapsize) && inputArr[right] > inputArr[largest])
            largest = right;
        if(largest != i){
            temp = inputArr[i];
            strcpy(inputArr[i], inputArr[largest]);
            strcpy(inputArr[largest], temp);
            maxHeapify(largest, heapsize);
        }
    }
}

出于某种原因,假设我的堆按顺序包含 (M、B、D、K、E、F)。在我 运行 我的函数之后,结果是 (F, E, F, K, E, F)。我知道我的比较有问题,但我找不到它。任何帮助将不胜感激,在此先感谢!

在此代码中

        temp = inputArr[i];
        strcpy(inputArr[i], inputArr[largest]);
        strcpy(inputArr[largest], temp);

您正在使用第一个 strcpy 破坏 inputArr[i],因此第二个没有任何效果(您正在复制刚复制回来的相同字符串)。您需要使 temp 成为一个数组(不是指针)并将(strcpy)inputArr[i] 复制到其中。