gpt4 book ai didi

c - C 中的合并排序编译,但不排序

转载 作者:太空宇宙 更新时间:2023-11-04 07:40:20 25 4
gpt4 key购买 nike

我编写了这个程序来对数组进行排序。它工作正常,但不会排序!请帮我找出我逻辑中的错误。谢谢

[更新] 它能够工作!我只是按照下面的建议降低了 i、j 和 k。另外,从 i

#include <stdio.h>
#include <stdlib.h>

void mergesort(int[], int, int);
void merge(int [], int low, int mid, int hi); //function prototype

int main()
{
int arr[]={1,4,78,92,9};
mergesort(arr,0,5);
//after mergesort
for(int i=0; i<5; i++)
{
printf("%d, ", arr[i]);
}
system("pause");
return 0;
}

void mergesort(int aptr[], int low, int hi)
{
int mid =0;
int rightmax=0;
int leftmax=0;

if(low==hi)
{
return;
}
mid=(low+hi)/2;
mergesort(aptr, low, mid);
mergesort(aptr, mid+1, hi);
merge(aptr, low, mid, hi);
}

void merge(int aptr[], int low, int mid, int hi)
{
int j, i, k;

//copy contents of aptr to auxiliary b
for(i=low; i<=hi; i++)
{
bptr[i]=aptr[i];
}

// iterate through b as if they were still two arrays, lower and higher
//copy smaller elements first
i=low;
j=mid+1;
k=low;

while(i<= mid && j<=hi)
{
if(bptr[i]<=bptr[j])//<--put smaller element first
{
aptr[k++]=bptr[i++];
}
else
{
aptr[k++]=bptr[j++];
}
}
// copy back first half just in case
while(i<=mid)
{
aptr[k++]=bptr[i++];
}
}//function

最佳答案

声明i<= mid && j<=hi当您的程序执行时永远不会为真,因此,永远不会进入依赖于它的 while 循环,并且永远不会到达实际交换元素的代码。

for之后它之前的循环,i等于hi , 它总是大于 mid .我猜你是想重置 i等于low在你输入 while 之前循环。

关于c - C 中的合并排序编译,但不排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911666/

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