gpt4 book ai didi

c - 构建堆

转载 作者:行者123 更新时间:2023-11-30 18:48:45 26 4
gpt4 key购买 nike

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

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] 复制到其中。

关于c - 构建堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44769089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com