我试图用一组字符构建一个最大堆。这是我的一段代码......
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)。我知道我的比较有问题,但我无法找到它......任何帮助都会受到赞赏,并提前感谢!
答案 0 :(得分:2)
在此代码中
temp = inputArr[i];
strcpy(inputArr[i], inputArr[largest]);
strcpy(inputArr[largest], temp);
您使用第一个inputArr[i]
来摧毁strcpy
,因此第二个没有效果(您正在复制刚刚复制的相同字符串)。您需要使temp
成为一个数组(而不是指针)并将({strcpy)inputArr[i]
复制到其中。