归并排序问题,代码是按照教学视频打的,为什么会出错,显示一些奇奇怪怪的数字
问题描述:
如题,不知道是哪里疏漏了,请各位大神指教
#include<stdio.h>
#include<stdlib.h>
void merging(int list1[],int list1_size,int list2[],int list2_size)
{
int temp[8],i=0,j=0,k=0;
while(i<list1_size&&j<list2_size)
{
if(list1[i]<list2[j])
{
temp[k++]=list1[i++];
}
else
{
temp[k++]=list2[j++];
}
}
while(i<list1_size)
{
temp[k++]=list1[i++];
}
while(i<list2_size)
{
temp[k++]=list2[j++];
}
for(int m=0;m<(list1_size+list2_size);m++)
{
list1[m]=temp[m];
}
}
void merge_sort(int k[],int n)
{
if(n>1)
{
int *list1=k;
int list1_size=n/2;
int *list2=k+n/2;
int list2_size=n/2;
merge_sort(list1,list1_size);
merge_sort(list2,list2_size);
merging(list1,list1_size,list2,list2_size);
}
}
int main()
{
int a[8]={3,41,52,26,38,57,9,49};
merge_sort(a,8);
for(int i=0;i<8;i++)
printf("%d ",a[i]);
return 0;
}
答
while(i<list2_size)
{
temp[k++]=list2[j++];
}
这句中i改为j
答
merging函数中的
while(i<list2_size)
{
temp[k++]=list2[j++];
}
控制循环的变量应该为j