构建堆
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]
复制到其中。
我正在尝试用字符数组构建最大堆。这是我的一段代码...
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]
复制到其中。