建立堆

时间:2017-06-26 21:40:04

标签: c 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)。我知道我的比较有问题,但我无法找到它......任何帮助都会受到赞赏,并提前感谢!

1 个答案:

答案 0 :(得分:2)

在此代码中

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

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