gpt4 book ai didi

C:尝试实现 minHeapSort 然后打印它 - 无法使 for 条件正常工作

转载 作者:行者123 更新时间:2023-11-30 17:17:49 25 4
gpt4 key购买 nike

我遇到麻烦的是 buildHeap 和 buildMinHeap 中的 for 。以前,这些根本没有触发,这就是为什么我知道打印部分应该或多或少地工作,因为如果使用未排序的数组,它可以正确打印节点。

目前,我假设我有一个无限循环,因为程序在显示我输入的一些调试消息后崩溃了。我对可能出现的问题没有想法。有什么想法吗?

#include <stdio.h>

#define ARRAY_SIZE 10

int parent(int i) {
return i/2;
}

int left(int i) {
return 2*i;
}

int right(int i) {
return 2*i+1;
}

void heapify(int A[], int i, int s) {
int m = i;
int temp;
int l = left(i);
int r = right(i);

if (l <= s && A[l] > A[m]) m = l;
if (r <= s && A[r] > A[m]) m = r;
if (i != m) {
temp = A[i];
A[i] = A[m];
A[m] = temp;
heapify(A, m, s);
}
printf("heapify done\n");

}

void buildHeap(int A[]) {
int i;

for (i = ARRAY_SIZE / 2; i > 0; i--) {
heapify(A, i, ARRAY_SIZE);
}
printf("buildHeap done\n");
}

// this still creates a normal heap, not a min heap afaik
void buildMinHeap(int A[]) {
int s = ARRAY_SIZE - 1;
int i;
int temp;

buildHeap(A);

for (i = ARRAY_SIZE; i > 1; i--) {
temp = A[i];
A[i] = A[1];
A[1] = temp;
s = s-1;
heapify(A, 1, s);
}
}

void printHeap(int A[]) {
int i;

printf("graph g {\n");

for (i = 0; i < ARRAY_SIZE; i++) {
printf("%d -- %d\n", parent(i), A[i]);
}

printf(" }\n");

//temp debug code
printf("[ ");
i = 0;
for (i = 0; i < ARRAY_SIZE; i++) {
printf("%d", A[i]);
if (i < ARRAY_SIZE - 1) printf(", ");
}
printf(" ]\n");
}

int main() {
int array[ARRAY_SIZE] = {4, 3, 2, 5, 6, 7, 8, 9, 12, 1};

buildMinHeap(array);
printHeap(array);
}

编辑:哦,还有,我还是一名学生,所以还不太精通 C。只是为了提供一些背景信息。

最佳答案

在 C 语言中,数组使用从零开始的索引。 IE。包含 10 个元素的数组的元素索引为 0 到 9。

看起来您假设数组元素将从 1 索引到 ARRAY_SIZE,而实际上它们的索引是 0ARRAY_SIZE - 1

尝试一个非常简单的 main 函数,它仅输出数组的内容,然后再尝试对其进行任何操作:

#include <stdio.h>

#define ARRAY_SIZE 10

int main(void)
{
int index;
int array[ARRAY_SIZE] = {4, 3, 2, 5, 6, 7, 8, 9, 12, 1};

for(index = ARRAY_SIZE - 1; index >= 0; index--)
{
printf("myArray[%d] == %d\n",index,myArray[index]);
}
return 0;
}

您甚至可以添加一些辅助常量:

#define ARRAY_FIRST    0
#define ARRAY_LAST (ARRAY_SIZE -1)

关于C:尝试实现 minHeapSort 然后打印它 - 无法使 for 条件正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350482/

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