gpt4 book ai didi

c - 合并排序算法输出错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:13 24 4
gpt4 key购买 nike

我已经非常仔细地遵循了所有算法步骤,但这仍然总是输出错误的答案。我不明白为什么。我认为导致这种情况的合并算法有问题,但无法查明是什么。请帮忙。另外,如果有任何可以改进代码的地方,请提出建议。

谢谢

输入 - {5,6,1,8,9,7}

输出 - {1,0,7,0,9,7}

#include<stdio.h>
#include<malloc.h>

void mergeSort(int array[],int length);
void merge(int *leftArray,int *rightArray,int *array);

void main()
{

int array[] = {5,6,1,8,9,7};
int length_of_array;

length_of_array = sizeof(array) / sizeof(array[0]);

mergeSort(array,length_of_array);

int i;

for(i=0;i<length_of_array;i++)
{
printf("%d->",array[i]);
}
}

void mergeSort(int array[],int length)
{

if(length < 2)
return;


int mid;
int i;

mid = length/2;

int *leftArray, *rightArray;

leftArray = (int*)malloc(mid*sizeof(int));
rightArray = (int*)malloc((length-mid)*sizeof(int));

for(i=0;i<mid;i++)
leftArray[i] = array[i];

for(i=mid;i<length;i++)
rightArray[i-mid] = array[i];


mergeSort(leftArray, mid);
mergeSort(rightArray, length-mid);

merge(leftArray,rightArray,array);

}

void merge(int *leftArray,int *rightArray,int *array)
{
int i,j,k;
i = j = k = 0;

int leftSize = sizeof(leftArray)/sizeof(leftArray[0]);
int rightSize = sizeof(rightArray)/sizeof(rightArray[0]);

while(i < leftSize && j < rightSize)
{
if(leftArray[i]<rightArray[j])
{
array[k] = leftArray[i];
k = k + 1;
i = i + 1;
}
else
{
array[k] = rightArray[j];
k = k + 1;
j = j + 1;
}

}

while(i<leftSize)
{
array[k] = leftArray[i];
k = k + 1;
i = i + 1;

}

while(j<rightSize)
{
array[k] = rightArray[j];
k = k + 1;
j = j + 1;

}

}

最佳答案

正如@molbdnilo 所评论的,您无法从指针参数中获取数组的大小。所以merge需要取左右数组的长度以及指向它们的指针。

问题在于 C 中的数组不是“完整”的数据类型,而只是一种方便的语法。在您的 merge 函数中,参数 int *leftArray 正是它所说的 - 一个指向整数的指针。所以 sizeof 会告诉你指针的大小。在你的 main 函数中,array 已知是一个数组,并且它的长度是已知的(从给定的初始值),所以 sizeof 可以给出分配给该变量的实际内存大小。但该大小并未与变量一起存储在任何地方,因此它不会传递到 merge - 传递的唯一内容是指向内存块的指针。

此外,虽然在这种情况下不会给您带来问题,但您应该释放 leftArrayrightArray 指针你 malloc。这样您就可以在实际应用程序中使用您的排序功能而不会泄漏内存。

关于c - 合并排序算法输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036293/

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